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

infinite, r, svd

Solution

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

Problem

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 error might be? ``` fileUrl <- "https://dl.dropboxusercontent.com/u/76668273/kdd.csv"; download.file(fileUrl,destfile="./kdd.csv",method="curl"); kddtrain <- read.csv("kdd.csv"); kddnumeric <- kddtrain[,sapply(kddtrain,is.numeric)]; kddmatrix <- as.matrix(kddnumeric); svd1 <- svd(scale(kddmatrix)); ```

Original source