如何在计算中位数时将na.rm = TRUE传递给sapply函数?

18

我已经创建了一个名为“killers”的数据框,其中包含3个变量。虽然存在NA值,但数据是数字类型。

我的目标是计算每个变量的平均值。

sapply(killers, function(x) median)

这将返回:

$heartattack
function (x, na.rm = FALSE) 
UseMethod("median")
<bytecode: 0x103748108>
<environment: namespace:stats>

我知道na.rm参数是忽略NA值的一种方式。由于在R返回的内容中存在na.rm = FALSE,因此可以推断在上述代码行内设置为TRUE的方法。我尝试了几种变化:

sapply(killers, na.rm=TRUE function(x) median)
sapply(killers, function(x) median, na.rm=TRUE)
sapply(killers, function(x) median(na.rm=TRUE))

我不确定我是否接近答案或者是否需要嵌套函数,因为在SO上的其他类似问题的帖子(尽管我认为这些问题最终并没有帮助到我)可能需要。例如: 如何将na.rm作为参数传递给tapply?, 在sapply函数中忽略NA值

当然,我可以只计算用于创建killers的每个向量的平均值,但如果我的问题是可能的话,那么这样做就更好了。


3
sapply 表示“...:'FUN'的可选参数”。在“示例”部分中,有关于如何向函数传递附加参数的例子。 - Joshua Ulrich
@JoshuaUlrich 不是要冒犯你的意思。 - user1317221_G
2
你让sapply返回函数median,它确实做到了。函数是对象。(但你没有告诉它返回median(x)。) - IRTFM
1个回答

42

只需做:

sapply(killers, median, na.rm = TRUE)
基于您的代码,另一种选择是:
sapply(killers, function(x) median(x, na.rm=TRUE)) 

3
非常有帮助!sapply(killers, function(x) median(x, na.rm=TRUE)) 对我来说效果最好。 - user13822027

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