为什么mapply()的行为会有所不同,具体取决于所调用的函数?

时间:2016-12-05 14:17:45

标签: r mapply

我希望有人可以帮助我理解当您调用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

上面的代码返回10个值,即每个对象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的每个元素的平均值。

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

非常感谢!

1 个答案:

答案 0 :(得分:3)

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