为什么 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
现在关于sum
、min
、max
等用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 略知一二。找到所有这些见解花了很多时间。如果我误解了某些内容并提供了任何虚假信息,请告诉我。
我想了解为什么 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
现在关于sum
、min
、max
等用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 略知一二。找到所有这些见解花了很多时间。如果我误解了某些内容并提供了任何虚假信息,请告诉我。