即使允许NA,R函数prcomp也会以NA的值失败

use*_*113 23 r pca na

我正在使用该函数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)
Run Code Online (Sandbox Code Playgroud)

我正在使用适用于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
Run Code Online (Sandbox Code Playgroud)

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

nog*_*pes 21

是的,它看起来像一个"功能"(bug)na.action被完全忽略,除非你使用formula界面.这已经在R开发清单上提出.

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

为了清楚起见,这可以工作,因为它访问公式接口:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
Run Code Online (Sandbox Code Playgroud)

  • 我同意它应该记录在案(我是R开发列表中查询的作者); 推动这一进程的最佳方式,如果有人想要,将提议更改文档并将其提交到r-devel列表(和/或R bug跟踪器). (2认同)

Jil*_*ina 21

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

prcomp(na.omit(d), center = TRUE, scale = TRUE)
Run Code Online (Sandbox Code Playgroud)

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