首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中运行princomp()有什么问题?

在R中运行princomp()有什么问题?
EN

Stack Overflow用户
提问于 2014-05-02 13:35:33
回答 1查看 909关注 0票数 0

我使用princomp()运行PCA。我的数据集叫做vt。

代码语言:javascript
运行
复制
pca = princomp(as.matrix(vt))
Error in cov.wt(z) : 'x' must contain finite values only

但是,当我检查是否有无限大的值时,却没有。

代码语言:javascript
运行
复制
sum(is.infinite(as.matrix(vt)))
[1] 0

我的分析出了什么问题?

vt是一个包含所有数值的data.frame。

代码语言:javascript
运行
复制
is.numeric(as.matrix(vt))
[1] TRUE
EN

回答 1

Stack Overflow用户

发布于 2014-05-04 00:21:09

解决方案似乎是删除缺少的值。有两种方法可以从数据集中删除缺失值。您可以在调用princomp()之前使用na.omit()函数显式删除它们,也可以使用带有参数na.action=na.omitprincomp()的公式接口。您已经对princomp()使用了矩阵接口,而na.action不是矩阵接口的选项,因此它在您的情况下不起作用。有关更多详细信息,请参见?princomp。

请考虑以下几点:

代码语言:javascript
运行
复制
# Add one missing value to USArrests data set
USArrests[1,1]<-NA

# Does not work (matrix interface)
princomp(USArrests)
# Error in cov.wt(z) : 'x' must contain finite values only

# Does work (formula interface)
princomp(~., data=USArrests, na.action=na.omit)

# Does work (remove missing values before PCA)
princomp(na.omit(USArrests))

因此,在您的示例中,如下所示:

代码语言:javascript
运行
复制
pca = princomp(~., data=as.matrix(vt), na.action=na.omit)

应该能行得通。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23421438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档