R中出现意外的na错误

时间:2016-03-27 17:49:36

标签: r na princomp

(复活节快乐)

我一直试图在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个样本。

1 个答案:

答案 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上运行代码