关于r:为什么min / max / sum(c(NA,4,5),na.rm =“ xyz”)有效,而具有相同输入的mean()不起作用?

 2020-10-18 

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")返回NA,NA作为参数提供给na.rm,出于某些奇怪的原因,sum / min / max被接受为TRUE,而mean()则不接受

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


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

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

这给你的错误。

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

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

这类似于做

1
if ("abc")"Hello"

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

现在,关于summinmax和其他用C实现的原始函数。这些函数的源代码在这里。 函数中传递了参数Rboolean narm

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

1
2
3
4
5
6
7
8
9
10
11
12
#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"。 在此处运行演示。 如果将字符串输入传递给布尔类型,则在C中将其视为TRUE。 实际上,数字也是如此

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

也可以。

PS-我不是C语言方面的专家,并且对R有点了解。找到所有这些见解需要花费很多时间。 让我知道我是否误解了某些内容并提供了任何虚假信息。