我正试图使用FactoMineR在数据表上运行MCA。它只包含0/1个数字列,大小为200.000*20。
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
我得到以下错误:
错误,其中(unlist(lapply(listModa,为数字)):"which"的参数不是逻辑
我真的不知道该怎么处理这个错误。然后我尝试将每一列都变成字符,一切都成功了。我认为这可能对其他人有用,也许有人能向我解释这个错误;)
干杯
变量的类是字符还是因子?我有这个问题。我的解决方案是将所有变量改为因子。
#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
i=i+1 aux.da[,i] = as.factor(aux.da[,i])
}
如果没有进一步的输入,很难判断,但您可以做的是:
- 查找发生错误的函数(通过
traceback()
) -
设置断点并调试:
trace(tab.disjonctif, browser)
我做了以下(离线)操作来查找tab.disjonctif
:的名称
- 在GitHub上的CRAN镜像上找到包
- 搜索给出错误的特定表达式
我昨天刚开始学习R,但错误来自MCA用于categorical data
,所以这就是为什么数据不能是数字的原因。更准确地说,在MCA之前,会创建一个"tableau disjonctif"(对不起,我不知道英语中的单词:完全析取矩阵)。所以FactomineR正在使用这个功能:
https://github.com/cran/FactoMineR/blob/master/R/tab.disjonctif.R
我认为它在寻找可以与数值匹配的分类值(比如Y=1,N=0)。
为他人;注意:因为R分类数据与factor
类型有关,所以even if you have characters you could get this error
。
构建@markets、@Khaled和@Pierre Gourseaud:
是的,将变量的格式更改为factor应该可以解决错误消息,但如果数值数据应该是连续的数值数据,则不应该将其格式更改为factor。相反,如果同时有连续变量和分类变量,请尝试在同一个FactoMineR
包中运行混合数据的因子分析(FAMD)。
如果你走FAMD路线,你可以只更改分类变量列的格式,以考虑以下因素:
data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor)
(假设列编号3、4、5和10需要更改)。
这不会只适用于数字变量。如果您只有数字,请使用PCA。否则,请在数据框中添加一个因子变量。对于您的情况,您似乎需要将变量更改为二元因素。
同样的问题和改为因子也没有解决我的答案,因为我把每个变量都作为补充。
我首先做的是将我所有的数字数据转换为因子:
Xfac = factor(X[,1], ordered = TRUE)
for (i in 2:29){
tfac = factor(X[,i], ordered = TRUE)
Xfac = data.frame(Xfac, tfac)
}
colnames(Xfac)=labels(X[1,])
不过,这是行不通的。但我的第二个问题是,我把每个因素都作为补充变量!所以这些:
MCA(Xfac, quanti.sup = c(1:29), graph=TRUE)
MCA(Xfac, quali.sup = c(1:29), graph=TRUE)
会产生同样的错误,但这个有效:
MCA(Xfac, graph=TRUE)
没有将数据转换为因素也产生了问题。
我发布了一个相关主题的相同答案:https://stackoverflow.com/a/40737335/7193352