4

次のマトリックスを検討してください。

x <- matrix(c(1,1,1,3),2)
x
     [,1] [,2]
[1,]    1    1
[2,]    1    3

これを呼び出すscaleと、NaN分散がゼロの最初の列の値が返されます。

scale(x)
     [,1]       [,2]
[1,]  NaN -0.7071068
[2,]  NaN  0.7071068
attr(,"scaled:center")
[1] 1 2
attr(,"scaled:scale")
[1] 0.000000 1.414214

しかし、私はそれが戻ってくることを期待してい0ます. これはバグですか、それともこれが何であり、返すべきかを誤解していますか?

私が欲しいものの回避策は次のとおりです。

y <- scale(x)
y[is.nan(y)] <- 0

しかし、これには追加の変数の使用が含まれます。より洗練された解決策はありますか?

4

2 に答える 2

12

scale分散で除算するため、これを行う必要があります。

連続変数は実際には関係があるとは想定されておらず、分散がゼロであることははるかに少なく、離散変数またはカテゴリ変数をスケーリングすることは適切ではありません。

于 2013-03-12T14:24:38.520 に答える
7

次の回避策を使用できます。

apply(x, 2, function(y) (y - mean(y)) / sd(y) ^ as.logical(sd(y)))

     [,1]       [,2]
[1,]    0 -0.7071068
[2,]    0  0.7071068
于 2013-03-12T14:42:38.317 に答える