微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

svd(x, nu = 0, nv = k) 中的错误:'x' 中的值无限或缺失矩阵中没有 NA 或 Inf 值

如何解决svd(x, nu = 0, nv = k) 中的错误:'x' 中的值无限或缺失矩阵中没有 NA 或 Inf 值

我检查了矩阵中的 NA、Inf 和 -Inf。没有发生。发生了什么?

head(peaks.new)
           X99     X111     X127      X191      X196     X273      X347      X357      X372     X430      X542      X601      X676      X688     X730
[1,] 0.5804457 1.144064 1.060764 0.3957671 0.4605744 1.395375 0.3997679 0.4058198 0.6135423 1.024926 0.3185467 0.4280903 0.4200074 0.4150762 1.026295
[2,] 0.6738807 1.228152 1.199513 0.4588390 0.5470579 1.383542 0.4491294 0.4576340 0.7606879 1.188590 0.3476853 0.4771873 0.5021612 0.4848465 1.165312
[3,] 0.6315261 1.235551 1.234193 0.4415364 0.5230350 1.514145 0.4512593 0.4589265 0.7238682 1.180188 0.3389439 0.4703305 0.4733625 0.4622625 1.175494
[4,] 0.6482746 1.240872 1.270660 0.5258102 0.5381634 1.430304 0.4888256 0.4987946 0.8740429 1.189461 0.3790521 0.5155980 0.4893849 0.4897720 1.090612
[5,] 0.6110295 1.215108 1.162420 0.4374122 0.4988751 1.435029 0.4320153 0.4360902 0.7144469 1.148086 0.3276657 0.4432349 0.4520939 0.4402073 1.129200
[6,] 0.7070189 1.344910 1.254874 0.4893428 0.5730396 1.708531 0.4627560 0.4797072 0.7752893 1.229642 0.3612133 0.4825547 0.5037152 0.4896373 1.267938

pca.peaks <- prcomp(t(peaks.new),scale=T,retx=T,center=T)
Error in svd(x,nu = 0,nv = k) : infinite or missing values in 'x'


which(peaks.new==0)
integer(0)
> which(peaks.new==Inf)
integer(0)
> which(peaks.new==-Inf)
integer(0)
> which(peaks.new==NA)
integer(0)

解决方法

NA 很棘手。考虑一下:

> a = c(1,NA,2)
> which(a == NA)
integer(0)

> a == NA
[1] NA NA NA

与 NA 进行相等性检查将导致 NA。检查 NA 的正确方法是使用 is.na() 函数:

> is.na(a)
[1] FALSE  TRUE FALSE

对于 is.infinite() 的情况也有 Inf,但在这种情况下直接比较有效(例如 (1/0) == Inf 产生 TRUE)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。