为什么 min/max/sum(c(NA, 4, 5), na.rm = "xyz") 工作而具有相同输入的 mean() 不工作?

Why does min/max/sum(c(NA, 4, 5), na.rm = "xyz") work while mean() with same inputs doesn't?

我想了解为什么 R 中的 sum/min/max 函数在提供给 na.rm 时将字符串解释为 TRUE,而 mean() 则不会。

我没有根据的猜测是 as.logical("xyz") returns NA 作为参数提供给 na.rm,由于某些奇怪的原因,它被 [=23= 接受为 TRUE ] 而它不适用于 mean()

sum(c(NA, 4, 5), na.rm = "xyz") 的预期输出是一个不能解释为逻辑错误的参数(从均值返回)。我不明白为什么不是这样。

mean 而言,它非常简单。正如@Rich Scriven 提到的,如果您在控制台中键入 mean.default,您会看到一段代码

if (na.rm) 
   x <- x[!is.na(x)]

这给了你错误。

mean(1:10, na.rm = "abc") #gives

Error in if (na.rm) x <- x[!is.na(x)] : argument is not interpretable as logical

这类似于做

if ("abc") "Hello"

Error in if ("abc") "Hello" : argument is not interpretable as logical


现在关于summinmax等用C语言实现的原始函数,这些函数的源代码是here。有一个参数 Rboolean narm 传递给函数。

C 处理布尔值的方式不同。

#include <stdio.h>
#include <stdbool.h>

int main()
{
  bool a = "abc";
  if (a)
    printf("Hello World");
  else
    printf("Not Hello World");
  return 0;
}

如果您 运行 上述 C 代码,它将打印 "Hello World"。 运行 演示 here。如果将字符串输入传递给布尔类型,它将被视为 C 中的 TRUE。事实上,数字也是如此

sum(1:10, na.rm = 12)

同样有效。

PS - 我不是 C 方面的专家,但对 R 略知一二。找到所有这些见解花了很多时间。如果我误解了某些内容并提供了任何虚假信息,请告诉我。