(复活节快乐)
我一直试图在R中计算出一个PDDP算法,并且在使用princomp
函数时我一直遇到一个小错误。这是错误陈述:
Error in cov.wt(z) : 'x' must contain finite values only
从一些粗略的研究中,只要princomp
函数中的数据中存在NA或未定义的值,就会出现此错误。但是,我使用的数据(维基百科的虹膜数据)中没有NA。这是包含princomp
的代码行:
pr <- princomp(data[iIndexes,], scores = TRUE, na.action = na.exclude)
从我的研究中,我被告知这个标准na.action
值(na.omit)目前被窃听,所以建议我改用na.exclude。我还建议将函数作为第一个参数包含在内,但这并没有改变错误信息。
以下是我获取该信息的地方:Omit NA and data imputation before doing PCA analysis using R
如果您需要上下文中的其余代码,请告诉我。 感谢
修改:根据要求,这是dput(data[iIndexes,])
的输出:
structure(c(36L, 19L, 10L, 6L, 32L, 52L, 8L, 28L, 2L, 20L, ...), .Label =
c("4.3,3,1.1,0.1", "4.4,2.9,1.4,0.2", "4.4,3,1.3,0.2", "4.4,3.2,1.3,0.2", ...),
class = "factor")
省略号是与其余数据类似的其他数据集,每个数据集150个样本。
答案 0 :(得分:1)
我在没有class = "factor"
参数的情况下运行代码pr
将正确返回。
这对我有用:
a = c(36L, 19L, 10L, 6L, 32L, 52L, 8L, 28L, 2L, 20L)
b = c("stringa", "stringb")
data = structure(a, .Label = b)
pr <- princomp(data, scores = TRUE, na.action = na.exclude)
pr
pr
返回:
Call:
princomp(x = data, scores = TRUE, na.action = na.exclude)
Standard deviations:
Comp.1
14.95359
1 variables and 10 observations.
<强>解决方案强>
取消数据类别:
tempVar <- unclass(data[iIndexes,])
并在tempVar上运行代码