na.rm=TRUE实际上是什么意思?

9

每当我们的数据中存在NA时,我们使用na.rm=TRUE来获取平均数、众数等正确的结果。na.rm是什么意思呢?我可以理解rm是删除的意思,我们甚至用它来删除变量。但为什么我们把na写成小写?R是区分大小写的吗?这里的布尔值TRUE是什么作用?


顺便提一下,虽然我使用该参数来从数据中删除na值,但有时候人们可能更喜欢删除它们。例如,如果某个过程中的断言是没有缺失数据,那么我建议不要使用na.rm=TRUE,因为在最好的情况下,它(1)不执行任何操作;但很可能(2)掩盖了输入数据假设的问题。只是一个想法。 - r2evans
4
比起当前的回答,我希望更加强调*na.rm并没有什么特殊之处*,它只是一个参数名称。许多函数都会使用它并以某种方式实现,但更多的则不会。新手常常在许多常见函数中看到它,并认为它可以在任何函数中使用,但事实并非如此。只有实现了该参数的函数才能使用它,而未实现该参数的函数则不能。每个接受na.rm参数的函数都可以自由地解释它。 - Gregor Thomas
2个回答

12

参数na.rm提供了一种简单的方式来从数据中移除缺失值,如果它们被编码为NA。在基础 R 中,它的标准默认值是FALSE,意味着NA不会被移除。

考虑下面这个包含两个元素的向量,其中一个是缺失值。

x <- c(1, NA)

现在,它的平均值是什么?
我们应该将所有非缺失值相加,然后除以其 完整长度,即2吗?还是应该除以去除 NA 后的长度,即1?

sum(x, na.rm = TRUE)/length(x)
#[1] 0.5
sum(x, na.rm = TRUE)/length(x[!is.na(x)])
#[1] 1
如果使用 mean ,则计算的是后者。
mean(x, na.rm = TRUE)
#[1] 1

3
我想用这个例子来回答——这是一个好例子。我原本要添加一行代码 sum(x, na.rm = TRUE) / length(x, na.rm = TRUE),以此强调并不是所有常见的基础 R 函数都带有这个参数——它并不能在所有情况下起作用。 - Gregor Thomas

6

na.rm是许多函数中的一个参数(你给出了一些例子)。要获取有关函数参数的信息,请运行?function

例如,在mean()中,运行:

?mean

为您提供所需的信息:

na.rm:一个逻辑值,指示在计算之前是否应该去除NA值。

通过将这个参数赋予一个逻辑值(TRUEFALSE),您可以选择在运行函数时是否剥离NAs。默认值(也由mean()文档给出)是FALSE

是的:R区分大小写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接