我正在使用R进行一些PCA分析。一切都运行良好,直到我发现我应该处理我的数据集的转置。然而,当我尝试在转置数据集上进行PCA时,我无法解决这个问题!
> sum(is.na(data_t))
[1] 1367
> dim(data_t)
[1] 599 9505
> data_t[1:4,1:4]
2'-PDE 7A5 A1BG A2M
TCGA.A1.A0SD.01A.11R.A115.07 0.0153750 2.4105 0.9493333 0.24200
TCGA.A1.A0SE.01A.11R.A084.07 0.4669375 0.3635 0.2798333 1.03850
TCGA.A1.A0SH.01A.11R.A084.07 -0.0295625 1.8550 0.7486667 1.16050
TCGA.A1.A0SJ.01A.11R.A084.07 0.7919375 1.4080 0.7500000 1.67775
> pca2<-princomp(~.,data=data_t, na.action=na.omit)
Error in `[.data.frame`(mf, , x) : undefined columns selected
> pca2<-princomp(data_t, na.action=na.omit)
Error in princomp.default(data_t, na.action = na.omit) :
'princomp' can only be used with more units than variables
如果变量多于单位,则无法使用princomp。但是你可以使用prcomp(参见R - 'princomp' can only be used with more units than variables),但我仍然会遇到错误!
> pca2<-prcomp(data_t,na.action=na.omit)
Error in svd(x, nu = 0) : infinite or missing values in 'x'
> pca2<-prcomp(~ ., data=data_t, na.action=na.omit, scale=TRUE)
Error in `[.data.frame`(mf, , x) : undefined columns selected
答案 0 :(得分:2)
当R缺少数据并且您尝试使用包含所有变量的公式时,似乎R不喜欢它。所以这最终起作用了:
pca2<-prcomp(na.omit(data_t), scale=TRUE)
当然这省略了缺少数据的那些列。
答案 1 :(得分:1)
我遇到了同样的问题。对我来说,当我将列名(除数字之外)分配给data.frame
时,它就起作用了。
例如,当colnames(mydf)
为(1,2,3,4,5)
时,我收到此错误:
Error in [.data.frame(mf, , x) : undefined columns selected
我做的是:
colnames(mydf) <- paste("var", 1:5, sep="")
然后运行princomp
函数:
mypca <- princom(~. , data=myrdf, cor=F, na.action=na.exclude)
并没有问题。