29

我正在使用该函数prcomp来计算前两个主成分。但是,我的数据有一些 NA 值,因此该函数会引发错误。即使在帮助文件中提到了 na.action 定义似乎也不起作用?prcomp

这是我的例子:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10))

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

d$V1[5] <- NA
d$V2[7] <- NA

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

我正在为 Mac OS X 使用最新的 R 版本 2.15.1。

任何人都可以看到prcomp失败的原因吗?

这是我的新示例:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10))

result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

result$x

d$V1[5] <- NA

result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)

result$x

是否可以在 PC1 和 PC2 中保留第 5 行?在我的真实数据集中,我当然有超过两列的变量,只有其中一些丢失了,我不想丢失隐藏在其他值中的剩余信息!

4

2 回答 2

30

如果您不愿意使用公式界面,另一种解决方案是

prcomp(na.omit(d), center = TRUE, scale = TRUE)

其中包括na.omit直接应用于数据框。

于 2012-08-22T17:47:45.947 回答
28

是的,它看起来像一个“功能”(错误),na.action除非您使用该formula界面,否则它会被完全忽略。这已经在 R 开发列表中提到过

我认为这应该被记录或标记为错误。

为了清楚起见,这会起作用,因为它访问公式界面:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
于 2012-08-22T17:31:21.947 回答