每当我们的数据中存在NA时,我们使用na.rm=TRUE来获取平均数、众数等正确的结果。na.rm是什么意思呢?我可以理解rm是删除的意思,我们甚至用它来删除变量。但为什么我们把na写成小写?R是区分大小写的吗?这里的布尔值TRUE是什么作用?
每当我们的数据中存在NA时,我们使用na.rm=TRUE来获取平均数、众数等正确的结果。na.rm是什么意思呢?我可以理解rm是删除的意思,我们甚至用它来删除变量。但为什么我们把na写成小写?R是区分大小写的吗?这里的布尔值TRUE是什么作用?
参数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
sum(x, na.rm = TRUE) / length(x, na.rm = TRUE)
,以此强调并不是所有常见的基础 R 函数都带有这个参数——它并不能在所有情况下起作用。 - Gregor Thomasna.rm
是许多函数中的一个参数(你给出了一些例子)。要获取有关函数参数的信息,请运行?function
。
例如,在mean()
中,运行:
?mean
为您提供所需的信息:
na.rm:一个逻辑值,指示在计算之前是否应该去除NA值。
通过将这个参数赋予一个逻辑值(TRUE
或FALSE
),您可以选择在运行函数时是否剥离NAs。默认值(也由mean()
文档给出)是FALSE
。
是的:R区分大小写。
na
值,但有时候人们可能更喜欢不删除它们。例如,如果某个过程中的断言是没有缺失数据,那么我建议不要使用na.rm=TRUE
,因为在最好的情况下,它(1)不执行任何操作;但很可能(2)掩盖了输入数据假设的问题。只是一个想法。 - r2evansna.rm
并没有什么特殊之处*,它只是一个参数名称。许多函数都会使用它并以某种方式实现,但更多的则不会。新手常常在许多常见函数中看到它,并认为它可以在任何函数中使用,但事实并非如此。只有实现了该参数的函数才能使用它,而未实现该参数的函数则不能。每个接受na.rm
参数的函数都可以自由地解释它。 - Gregor Thomas