"argument to 'which' is not logical" 在 FactoMineR MCA 中是什么意思?
What does "argument to 'which' is not logical" mean in FactoMineR MCA?
我正在尝试 运行 使用 FactoMineR 在数据表上创建 MCA。它仅包含 0/1 个数字列,其大小为 200.000 * 20.
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
我收到以下错误:
Error in which(unlist(lapply(listModa, is.numeric))) :
argument to 'which' is not logical
我真的不知道如何处理这个错误。然后我尝试 将每一列都转换为字符 ,并且一切正常。我认为它可能对其他人有用,也许有人能够向我解释错误 ;)
干杯
没有进一步的输入很难判断,但您可以做的是:
- 找到发生错误的函数(通过
traceback()
),
设置断点并调试:
trace(tab.disjonctif, browser)
我做了以下(离线)来找到 tab.disjonctif
的名字:
我昨天才开始学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
.
你的变量 类 是字符还是因子?我遇到了这个问题。我的解决方案是将 al 变量更改为 factor.
#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
i=i+1 aux.da[,i] = as.factor(aux.da[,i])
}
同样的问题,换成因子也没有解决我的答案,因为我把每个变量都作为补充。
我首先做的是将我所有的数字数据转换为因子:
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)
没有将数据转换为因子也产生了问题。
我对相关主题发布了相同的答案:
建立@marques、@Khaled 和@Pierre Gourseaud:
是的,将变量的格式更改为因子 应该 解决错误消息,但如果数字数据应该是连续的,则不应将其格式更改为因子数值数据。相反,如果您同时拥有连续变量和分类变量,请尝试 运行 同一 FactoMineR
包中的混合数据因子分析 (FAMD)。
如果你走 FAMD 路线,你可以改变 的格式只是你的分类变量列 以考虑这个因素:
data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor)
(假设需要更改列号 3、4、5 和 10)。
这不适用于数字变量。如果您只有数字,请使用 PCA。否则,向您的数据框添加一个因子变量。对于您的情况,您似乎需要将变量更改为二元因子。
我正在尝试 运行 使用 FactoMineR 在数据表上创建 MCA。它仅包含 0/1 个数字列,其大小为 200.000 * 20.
require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)
我收到以下错误:
Error in which(unlist(lapply(listModa, is.numeric))) : argument to 'which' is not logical
我真的不知道如何处理这个错误。然后我尝试 将每一列都转换为字符 ,并且一切正常。我认为它可能对其他人有用,也许有人能够向我解释错误 ;)
干杯
没有进一步的输入很难判断,但您可以做的是:
- 找到发生错误的函数(通过
traceback()
), 设置断点并调试:
trace(tab.disjonctif, browser)
我做了以下(离线)来找到 tab.disjonctif
的名字:
我昨天才开始学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
.
你的变量 类 是字符还是因子?我遇到了这个问题。我的解决方案是将 al 变量更改为 factor.
#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
i=i+1 aux.da[,i] = as.factor(aux.da[,i])
}
同样的问题,换成因子也没有解决我的答案,因为我把每个变量都作为补充。
我首先做的是将我所有的数字数据转换为因子:
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)
没有将数据转换为因子也产生了问题。
我对相关主题发布了相同的答案:
建立@marques、@Khaled 和@Pierre Gourseaud:
是的,将变量的格式更改为因子 应该 解决错误消息,但如果数字数据应该是连续的,则不应将其格式更改为因子数值数据。相反,如果您同时拥有连续变量和分类变量,请尝试 运行 同一 FactoMineR
包中的混合数据因子分析 (FAMD)。
如果你走 FAMD 路线,你可以改变 的格式只是你的分类变量列 以考虑这个因素:
data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor)
(假设需要更改列号 3、4、5 和 10)。
这不适用于数字变量。如果您只有数字,请使用 PCA。否则,向您的数据框添加一个因子变量。对于您的情况,您似乎需要将变量更改为二元因子。