gpt4 book ai didi

r - svd(x, nu = 0) : 0 extent dimensions 中的错误

转载 作者:行者123 更新时间:2023-12-04 11:15:18 30 4
gpt4 key购买 nike

我正在尝试对具有 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,这是不可能的。”

但不确定如何解决这个问题。非常感谢任何帮助......

最佳答案

sum(is.na(Sample.scaled))的事实来看出来为 90 , 当 sum(is.na(Sample))0 ,看起来你有三个常量列。

这是一个随机生成(可重现)的示例,它给出了相同的错误消息:

Sample <- matrix(rnorm(30 * 5000), 30)
Sample[, c(128, 256, 512)] <- 1

Sample <- data.frame(Sample)
Sample.scaled <- data.frame(apply(Sample, 2, scale))

> sum(is.na(Sample))
[1] 0

> sum(is.na(Sample.scaled))
[1] 90

# constant columns are "scaled" to NA.
> pca.Sample <- prcomp(Sample.scaled,retx=TRUE)
Error in svd(x, nu = 0) : infinite or missing values in 'x'

# 3 entire columns are entirely NA, so na.omit omits every row
> pca.Sample <- prcomp(na.omit(Sample.scaled),retx=TRUE)
Error in svd(x, nu = 0) : 0 extent dimensions

# can't scale the 3 constant columns
> 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

你可以尝试这样的事情:
Sample.scaled.2 <- data.frame(t(na.omit(t(Sample.scaled))))
pca.Sample.2 <- prcomp(Sample.scaled.2, retx=TRUE)

即使用 na.omit在转置上去掉 NA列而不是行。

关于r - svd(x, nu = 0) : 0 extent dimensions 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352815/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com