Reduce()Hadley Wickham的书籍Advanced R有两个功能的例子.两者都运作良好.
Reduce(`+`, 1:3) # -> ((1 + 2) + 3)
Reduce(sum, 1:3) # -> sum(sum(1, 2), 3)
Run Code Online (Sandbox Code Playgroud)
但是,在使用mean时Reduce(),它不遵循相同的模式.结果始终是列表的第一个元素.
> Reduce(mean, 1:3)
[1] 1
> Reduce(mean, 4:2)
[1] 4
Run Code Online (Sandbox Code Playgroud)
这两个功能sum()和mean()非常相似.为什么一个可以正常使用Reduce(),但另一个没有?如何在函数Reduce()给出错误结果之前知道函数是否正常运行?
这与以下事实有关:与sum或不同+,mean期望单个参数(re:值向量),因此不能以Reduce操作的方式应用,即:
Reduce使用二元函数来连续组合给定向量的元素和可能给定的初始值.
记下下面的签名mean:
mean(x, ...)
Run Code Online (Sandbox Code Playgroud)
当您向其传递多个值时,该函数将匹配x第一个值并忽略其余值.例如,当你打电话时Reduce(mean, 1:3),这或多或少是正在发生的事情:
mean(1, 2)
#[1] 1
mean(mean(1, 2), 3)
#[1] 1
Run Code Online (Sandbox Code Playgroud)
将其与sum接受可变数量值的行为进行比较:
sum(1, 2)
#[1] 3
sum(sum(1, 2), 3)
#[1] 6
Run Code Online (Sandbox Code Playgroud)