我也在处理R中的主成分分析中的相同问题。正在显示相同的错误消息:
cov.wt(z)中的错误:'x'必须仅包含有限值
我已经检查了你的答案,但仍然没有用。 user2662565遇到了同样的问题。
这是我用过的程序代码:
***data<-read.csv(file.choose(),header=T)
data
#Calculate number of rows and col
rows<-length(data[,1])
rows
cols<-length(data[1,])
cols
#Remove header and save each column to a matrix
for ( i in 1:rows){
for ( j in 1:cols){
if(data[i,j]=="NA"){
data[i,j]="0"
}
}
}
pca_a<-princomp(data, cor=True, covmat=NULL, scores=TRUE)
#Print scree plot
require(graphics)
plot(pca_a)
#plot pca
biplot(pca_a)***
答案 0 :(得分:3)
首先,您可以将rows<-length(data[,1])
替换为rows <- nrow(data)
,将cols<-length(data[1,])
替换为cols <- ncol(data)
。
其次,您应该通过制作玩具数据集来提供可重现的示例。我无法使用与您相同的数据,因为data<-read.csv(file.choose(),header=T)
会尝试在我的计算机上选择一个文件而您的数据文件不在我的计算机上。你能制作像data <- matrix(rnorm(100), nrow = 10, ncol = 10)
这样的玩具数据集并检查你的代码是否有效吗?
第三,如果数据的任何值都是非数字值(例如字符),则princomp
不起作用。在您的代码中,您要分配data[i, j] <- '0'
,这意味着您将数据值设为数字0
的字符串,而不是实际数字0
。您可以通过确保data
的所有值都是数值来阻止您的错误。