FactoMineR MCA 中的“对‘哪个’不合逻辑的论证”是啥意思?
Posted
技术标签:
【中文标题】FactoMineR MCA 中的“对‘哪个’不合逻辑的论证”是啥意思?【英文标题】:What does "argument to 'which' is not logical" mean in FactoMineR MCA?FactoMineR MCA 中的“对‘哪个’不合逻辑的论证”是什么意思? 【发布时间】:2016-03-19 21:12:36 【问题描述】:我正在尝试使用 FactoMineR 在数据表上运行 MCA。它仅包含 0/1 数字列,大小为 200.000 * 20。
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
我收到以下错误:
错误其中(unlist(lapply(listModa,is.numeric))): 'which' 的论点不合逻辑
我真的不知道如何处理这个错误。然后我尝试将每一列都变成字符,一切正常。我认为它可能对其他人有用,并且也许有人可以向我解释错误;)
干杯
【问题讨论】:
【参考方案1】:你的变量的类是字符还是因子?我遇到了这个问题。我的解决方案是将 al 变量更改为因子。
#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da))
i=i+1 aux.da[,i] = as.factor(aux.da[,i])
【讨论】:
【参考方案2】:没有进一步的输入很难说,但你可以做的是:
查找发生错误的函数(通过traceback()
),
设置断点并调试:
trace(tab.disjonctif, browser)
我做了以下(离线)来找到tab.disjonctif
的名字:
【讨论】:
【参考方案3】:我昨天刚开始学习 R,但错误来自于 MCA 是针对 categorical data
的事实,所以这就是为什么您的数据不能是数字的原因。然后更准确地说,在 MCA 之前创建了一个“tableau disjonctif”(对不起,我不知道英文中的单词:Complete disjunctive matrix)。
所以 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
。
【讨论】:
【参考方案4】:以@marques、@Khaled 和@Pierre Gourseaud 为基础:
是的,将变量的格式更改为因数应该解决错误消息,但如果它应该是连续的数值数据,则不应将数值数据的格式更改为因数。相反,如果您同时拥有连续变量和分类变量,请尝试在同一 FactoMineR
包中运行混合数据因子分析 (FAMD)。
如果你走 FAMD 路线,你可以改变 只是你的分类变量列的格式来考虑这个:
data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor)
(假设需要更改第 3、4、5 和 10 列)。
【讨论】:
【参考方案5】:这不适用于数字变量。如果您只有数字,请使用 PCA。否则,将一个因子变量添加到您的数据框中。对于您的情况,您似乎需要将变量更改为二元因子。
【讨论】:
【参考方案6】:同样的问题,更改为因子也没有解决我的答案,因为我已将每个变量都作为补充。
我首先将所有数值数据转换为因子:
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://***.com/a/40737335/7193352
【讨论】:
以上是关于FactoMineR MCA 中的“对‘哪个’不合逻辑的论证”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FactoMineR 包以编程方式确定主成分的列索引?
Openmpi 设置 btl 标志 --mca btl tcp 与 --mca btl_tcp_if_include eth1