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