【发布时间】:2018-03-28 03:07:30
【问题描述】:
我正在尝试对具有 5000 列和 30 行的数据框进行 PCA
Sample <- read.table(file.choose(), header=F,sep="\t")
Sample.scaled <- data.frame(apply(Sample,2,scale))
pca.Sample <- prcomp(Sample.scaled,retx=TRUE)`
得到错误
Error in svd(x, nu = 0) : infinite or missing values in 'x'
sum(is.na(Sample))
[1] 0
sum(is.na(Sample.scaled))
[1] 90
尝试使用以下方法忽略所有 na 值
pca.Sample <- prcomp(na.omit(Sample.scaled),retx=TRUE)
这给出了以下错误
Error in svd(x, nu = 0) : 0 extent dimensions
有报道称 na.action 需要给出公式,因此尝试了以下方法
pca.Sample <- prcomp(~.,center=TRUE,scale=TRUE,Sample, na.action=na.omit)
现在出现以下错误
Error in prcomp.default(x, ...) :
cannot rescale a constant/zero column to unit variance
认为问题可能是因为“我的一个数据列是常数。常数的方差为 0,然后缩放会除以 0,这是不可能的。”
但不确定如何解决这个问题。任何帮助都非常感谢....
【问题讨论】:
-
尝试
is.finite(Sample)而不是is.na。此外,您作为 data.frame 读入,转换为矩阵并返回 data.frame,您确定Sample中的所有列都是数字的(或者R认为它们是数字的)。lapply(Sample, scale)可能会更好。 -
还要注意
?prcomp已经有一个na.action=参数,默认情况下应该是na.omit。 -
@thelatemail : 感谢格式化
标签: r