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)); ```