为什么 mapply() 的行为会因调用的函数而异?

Why does mapply() behave differently depending on the function called?

我希望有人能帮助我理解为什么 mapply 函数在调用 sum 函数和调用 mean 函数时表现不同。

我的问题可能通过查看此 MWE 得到更好的解释(部分借自 https://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/

l1 <- list(a = c(1:10), b = c(11:20))
l2 <- list(c = c(21:30), d = c(31:40))

mapply(sum, l1$a, l1$b, l2$c, l2$d)

[1]  64  68  72  76  80  84  88  92  96 100

以上代码returns10个值,每个对象a,b,c,d中对应元素的和

以下示例的工作方式不同:

mapply(mean, l1$a, l1$b, l2$c, l2$d)

[1]  1  2  3  4  5  6  7  8  9 10

在后一个示例中,似乎忽略了 b、c 和 d,它只是计算 a 的每个元素的平均值。

如果有人能帮助我理解这一点,那就太好了。

非常感谢!

mapply 按预期工作。它从元素列表中按元素求和或表示元素。例如:

l1$a[1] + l1$b[1] + l2$c[1] + l2$d[1]

[1] 64

mean(l1$a[1], l1$b[1], l2$c[1], l2$d[1])

[1] 1

请注意 mean 只使用第一个参数,因为它只接受 x(参见 ?mean)。

> mean(l1$a[1])
[1] 1
> mean(l1$a[1], l1$b[1])
[1] 1

您可能想要使用 rapply

l <- list(l1, l2)
rapply(l, mean)

   a    b    c    d 
 5.5 15.5 25.5 35.5