R - svd() function - infinite or missing values in 'x'

前端 未结 1 974
不思量自难忘°
不思量自难忘° 2020-12-06 14:12

I am constantly getting this error. I am sure the matrix does not have any non-numeric entries. I also tried imputing the matrix, did not work.

Anyone know what the

相关标签:
1条回答
  • 2020-12-06 14:39

    You have columns composed of all zeroes. Using scale on a column of all zeroes returns a column composed of NaN. To solve this, remove columns where you have all zeroes (svd will not reveal anything new about them), or replace NaN columns with zero after using scale.

    Reproducible example:

    mat <- matrix(c(1,2,3,0,0,0,2,4,6,5,12,13),nrow = 3)
         # [,1] [,2] [,3] [,4]
    # [1,]    1    0    2    5
    # [2,]    2    0    4   12
    # [3,]    3    0    6   13
    scale(mat)
         # [,1] [,2] [,3]       [,4]
    # [1,]   -1  NaN   -1 -1.1470787
    # [2,]    0  NaN    0  0.4588315
    # [3,]    1  NaN    1  0.6882472
    # attr(,"scaled:center")
    # [1]  2  0  4 10
    # attr(,"scaled:scale")
    # [1] 1.000000 0.000000 2.000000 4.358899
    svd(mat) #fine
    svd(scale(mat)) # not fine
    
    0 讨论(0)
提交回复
热议问题