为什么意味着不在Reduce工作?

GL_*_*_Li 4 r

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)

但是,在使用meanReduce(),它不遵循相同的模式.结果始终是列表的第一个元素.

> Reduce(mean, 1:3)
[1] 1

> Reduce(mean, 4:2)
[1] 4
Run Code Online (Sandbox Code Playgroud)

这两个功能sum()mean()非常相似.为什么一个可以正常使用Reduce(),但另一个没有?如何在函数Reduce()给出错误结果之前知道函数是否正常运行?

nru*_*ell 8

这与以下事实有关:与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)