【发布时间】:2019-05-21 23:52:11
【问题描述】:
我想了解为什么 R 中的 sum/min/max 函数在将字符串提供给 na.rm 时将其解释为 TRUE,而 mean() 则不会。
我未受过教育的猜测是as.logical("xyz") 返回 NA,它作为参数提供给 na.rm,由于某种奇怪的原因,对于 sum/min/max,它被接受为 TRUE 而不是 mean()
sum(c(NA, 4, 5), na.rm = "xyz") 的预期输出是一个不能解释为逻辑错误的参数(从平均值返回)。我不明白为什么不是这样。
【问题讨论】:
-
min/max/sum是原语,而mean不是,这并非巧合。if (na.rm)的处理会在mean.default中产生错误,我认为它不会在min/max/sum中,因为它们是原语。 -
这个 QA 非常相似,并且指出了检查 C 源代码的正确方向:stackoverflow.com/a/14035586
-
我同意,如果
na.rm将被全面评估和强制执行,那将很有用。请注意,na.rm="FALSE"确实被解析为逻辑,因此并不是任何字符串都变为 TRUE,参见。sum(c(1:3,NA), na.rm="xyz") == 6、sum(c(1:3,NA), na.rm="TRUE") == 6和sum(c(1:3,NA), na.rm="FALSE") == NA。 -
同意!我不明白这里需要不一致。我对 C 不熟悉,但我认为某种严格的类型检查应该很容易实现,并且会全面强制执行一致的行为。对我来说绝对是WAT!? 时刻。
标签: r conceptual