当用所有NA的向量估计均值时,我们得到NaN,如果na.rm = TRUE。为什么会这样,这是错误的逻辑还是我遗漏了什么?使用NA比使用NaN更有意义吗?下面的快速示例
NaN
na.rm = TRUE
NA
mean(NA, na.rm = TRUE) #[1] NaN mean(rep(NA, 10), na.rm = TRUE) #[1] NaN
字符串
mspsb9vt1#
有点遗憾的是,?mean没有对此说任何话。我的评论只是告诉你,在一个空的“数字”上应用mean会导致NaN,而没有更多的推理。Rui Barradas的评论试图解释这一点,但并不准确,因为除以0并不总是NaN,它可以是Inf或-Inf。我曾经在R: element-wise matrix division中讨论过这个问题。然而,我们正在接近。虽然mean(x)不是由sum(x) / length(x)编码的,但这个数学事实确实解释了这个NaN。从?sum:
?mean
mean
0
Inf
-Inf
mean(x)
sum(x) / length(x)
?sum:
*NB:* the sum of an empty set is zero, by definition.
字符串所以sum(numeric(0))就是0。因为length(numeric(0))是0,mean(numeric(0))是0 / 0,NaN。
sum(numeric(0))
length(numeric(0))
mean(numeric(0))
0 / 0
x6h2sr282#
来自mean文档:na. rm是指示在计算进行之前是否应当剥离NA值的逻辑值。利用该逻辑,在应用函数均值之前移除所有NA。在你的例子中,你没有应用均值(所有NA都被删除),所以NaN被返回。
2条答案
按热度按时间mspsb9vt1#
有点遗憾的是,
?mean
没有对此说任何话。我的评论只是告诉你,在一个空的“数字”上应用mean
会导致NaN
,而没有更多的推理。Rui Barradas的评论试图解释这一点,但并不准确,因为除以0
并不总是NaN
,它可以是Inf
或-Inf
。我曾经在R: element-wise matrix division中讨论过这个问题。然而,我们正在接近。虽然mean(x)
不是由sum(x) / length(x)
编码的,但这个数学事实确实解释了这个NaN
。从
?sum:
字符串
所以
sum(numeric(0))
就是0
。因为length(numeric(0))
是0
,mean(numeric(0))
是0 / 0
,NaN
。x6h2sr282#
来自
mean
文档:na. rm是指示在计算进行之前是否应当剥离NA值的逻辑值。
利用该逻辑,在应用函数均值之前移除所有NA。在你的例子中,你没有应用均值(所有NA都被删除),所以NaN被返回。