首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么对于零方差列,scale返回NaN?

为什么对于零方差列,scale返回NaN?
EN

Stack Overflow用户
提问于 2013-03-12 22:13:04
回答 2查看 13.5K关注 0票数 4

考虑以下矩阵:

代码语言:javascript
复制
x <- matrix(c(1,1,1,3),2)
x
     [,1] [,2]
[1,]    1    1
[2,]    1    3

使用此函数调用scale时,返回第一列的NaN值,该列的方差为零:

代码语言:javascript
复制
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。这是一个bug,还是我误解了这是什么并且应该返回?

我想要的解决办法是:

代码语言:javascript
复制
y <- scale(x)
y[is.nan(y)] <- 0

但这涉及到额外变量的使用,有没有更好的解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-12 22:24:39

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

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

票数 12
EN

Stack Overflow用户

发布于 2013-03-12 22:42:38

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

代码语言:javascript
复制
apply(x, 2, function(y) (y - mean(y)) / sd(y) ^ as.logical(sd(y)))

     [,1]       [,2]
[1,]    0 -0.7071068
[2,]    0  0.7071068
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15363610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档