当使用一个全为 NA 的向量估计均值时,如果 na.rm = TRUE
,我们会得到一个 NaN
。为什么会这样,这是错误的逻辑还是我漏掉了什么?毫无疑问,使用 NA
而不是 NaN
更有意义。
以下是一个快速示例:
mean(NA, na.rm = TRUE)
#[1] NaN
mean(rep(NA, 10), na.rm = TRUE)
#[1] NaN
?mean
没有提到这一点。 我在 我的评论 中告诉你,在空的 "numeric" 上应用 mean
会导致结果为 NaN
,但没有更多的解释。 Rui Barradas's 评论 尝试解释了这一点,但不准确,因为除以 0
不总是 NaN
,它可以是 Inf
或 -Inf
。我曾在 R: element-wise matrix division 中讨论过这个问题。然而,我们正在接近答案。虽然 mean(x)
不是由 sum(x) / length(x)
编写的,但这个数学事实确实解释了这个 NaN
。?sum:
开始: *NB:* the sum of an empty set is zero, by definition.
因此,sum(numeric(0))
为0
。由于numeric(0)
的长度为0
,所以mean(numeric(0))
是0 / 0
,也就是NaN
。
NaN
的进一步阅读:在R中,为什么is.numeric(NaN)会打印“TRUE”?。此外,读者应该了解到median(numeric(0))
返回NA
,min(numeric(0))
返回Inf
,max(numeric(0))
返回-Inf
。它们为什么会这样行为在文档页面?median
和?min
中有解释。 - Zheyuan Li来自mean
文档:
na.rm 一个逻辑值,指示在计算之前是否应该删除NA值。
按照这种逻辑,在应用函数mean之前,所有NA都将被删除。在您的情况下,您将mean应用于空值(所有NA都已删除),因此返回NaN。
NULL
,因为r仍然将向量识别为数字,即使它包含所有缺失值。例如,即使您删除了NA
值,这也会引发警告:mean(c(NA_character_),na.rm = TRUE)
。关于numeric(0)
的观点很有趣。 - Mike
NaN
。至于是否更合理,我认为不是,因为你已经删除了缺失值。 - Rui Barradasmean(numeric(0))
的意思是计算空数值向量的平均值。 - Zheyuan Limean(as.Date(NA), na.rm = TRUE)
的结果是 NA 而不是 NaN。 - Dan Chaltiel