![](/img/trans.png)
[英]PCA in R: Error in svd(x, nu=0, nv=k) : Infinite or missing values in 'x'
[英]Error in svd(x, nu = 0) : 0 extent dimensions
我試圖在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
列而不是行。
如下所示,可以在對數變換后替換負無窮大值。
log_features <- log(data_matrix[,1:8])
log_features[is.infinite(log_features)] <- -99999
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.