我想了解为什么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")不能解释为逻辑错误(从均值返回)。我不明白为什么不是这种情况。
就目前mean而言,这非常简单。正如 @Rich Scriven 提到的,如果您mean.default在控制台中输入,您会看到一段代码
if (na.rm)
x <- x[!is.na(x)]
Run Code Online (Sandbox Code Playgroud)
这给了你错误。
mean(1:10, na.rm = "abc") #gives
Run Code Online (Sandbox Code Playgroud)
if (na.rm) x <- x[!is.na(x)] 中的错误:参数无法解释为逻辑
这类似于做
if ("abc") "Hello"
Run Code Online (Sandbox Code Playgroud)
if ("abc") "Hello" 中的错误:参数无法解释为逻辑
现在介绍sum、min、max和其他用 C 实现的原始函数。这些函数的源代码在这里。有一个参数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;
}
Run Code Online (Sandbox Code Playgroud)
如果运行上面的C代码,它将打印“Hello World”。在这里运行演示。如果将字符串输入传递给布尔类型,则它被视为TRUEin C。事实上,对于数字来说也是如此
sum(1:10, na.rm = 12)
Run Code Online (Sandbox Code Playgroud)
也有效。
PS - 我不是 C 方面的专家,并且了解一点 R。找到所有这些见解花了很多时间。如果我误解了某些内容并提供了任何虚假信息,请告诉我。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |