1. ホーム
  2. r

[解決済み] R - svd() 関数 - 'x' の値が無限大または欠落している

2022-02-15 12:32:34

質問

このエラーが常に発生します。行列に数値以外の項目がないことは確認しています。また、行列を帰属させようとしましたが、うまくいきません。

どなたか、このエラーについてご存知の方はいらっしゃいますか?

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

解決方法は?

すべて0からなる列があります。使用方法 scale で構成される列を返します。 NaN . これを解決するには、すべてのゼロがある列を削除します ( svd を使っても新しい情報は得られません)、あるいは NaN を使用した後、ゼロにします。 scale .

再現性のある例です。

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