2014-01-29 21 views
2

我不斷收到此錯誤。我相信矩陣沒有任何非數字條目。我也嘗試輸入矩陣,沒有工作。R-svd()函數 - 'x'中的無限或缺失值

任何人都知道錯誤可能是什麼?

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)); 
+2

將來,一個小的可再現的示例(而不是東西,需要下載)是表示讚賞。 –

回答

8

您有由所有零組成的列。在所有零列上使用scale將返回由NaN組成的列。要解決這個問題,請刪除全部爲零的列(svd不會透露任何關於它們的新內容),或者在使用scale後用012替換NaN列。

重現的例子:

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

非常感謝,完美的答案。在申請svd之前解決了一個簡單的線kddmatrix < - kddmatrix [,colSums(kddmatrix!= 0)!= 0]。 –