R 为什么scale为零方差列返回NaN?

R 为什么scale为零方差列返回NaN?,r,R,考虑以下矩阵: x <- matrix(c(1,1,1,3),2) x [,1] [,2] [1,] 1 1 [2,] 1 3 但是,我希望它返回0。这是一个错误还是我误解了这是什么,应该返回 我想要的解决方案是: y <- scale(x) y[is.nan(y)] <- 0 y因为scale除以方差,所以它必须这样做 连续变量实际上不应该有联系,更不用说零方差,而且不适合缩放离散变量或分类变量。您可以使用以下解决方法: apply(x,

考虑以下矩阵:

x <- matrix(c(1,1,1,3),2)
x
     [,1] [,2]
[1,]    1    1
[2,]    1    3
但是,我希望它返回
0
。这是一个错误还是我误解了这是什么,应该返回

我想要的解决方案是:

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

y因为
scale
除以方差,所以它必须这样做


连续变量实际上不应该有联系,更不用说零方差,而且不适合缩放离散变量或分类变量。

您可以使用以下解决方法:

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

     [,1]       [,2]
[1,]    0 -0.7071068
[2,]    0  0.7071068

+1正如一个注释,
scale
除以标准偏差,但显然这里的结果是相同的。啊,魔鬼在细节中。根据帮助文件中的签名,我假设
scale
参数为
TRUE
FALSE
。我想我想在这里指定我自己的列比例。谢谢(+1)我认为问题也是关于删除额外变量的可能性。产生NaN的是0/0。(+1)只要
scale
的预期用途是同时使用默认参数
center
scale
设置为
TRUE
谢谢,这是一个很好的解决方法。不过,我需要重新考虑什么是适合我的应用程序的比例因子。
apply(x, 2, function(y) (y - mean(y)) / sd(y) ^ as.logical(sd(y)))

     [,1]       [,2]
[1,]    0 -0.7071068
[2,]    0  0.7071068