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