r语言 - "argument to 'which' is not logical"在FactoMineR MCA中是什么意思?



我正试图使用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

最新更新