理解 accumulate 函数的工作原理

Understanding how the accumulate function works

我阅读了使用手册 accumulate 说它是一个 2 参数函数。我不明白给定的例子:

1:5 %>% accumulate(`+`)
#> [1]  1  3  6 10 15

如果accumulate是一个二元函数,它输出的第一个元素应该是3吗?因为1+2=3,为什么第一个元素可以作为输出?

.init 参数决定输出中的第一个值。如果您没有指定任何内容,它 returns 向量的第一个值作为输出中的第一个值(此处为 1)。

来自 ?accumulate.

.init - If supplied, will be used as the first value to start the accumulation, rather than using .x[[1]].

您可以指定自己的 .init 参数。

library(purrr)
1:5 %>% accumulate(`+`, .init = 3)
#[1]  3  4  6  9 13 18

accumulate 是一个双参数函数,其中第一个参数是一个向量,第二个参数是一个函数。它的输出也是一个与输入长度相同的向量,除非提供 .init,在这种情况下它将比输入长度大一个长度。

1:5 %>% accumulate(`+`)

#means

accumulate(1:5, `+`)

现在,accumulate 通过在提供的向量的各个元素之间滚动提供的函数来计算输出。由于作为输出的第二个参数提供的 operation 需要两个元素,即 (i) 前一个元素的输出和 (ii) 下一个元素,逻辑上第一次它可以输出输入向量的相同元素而不应用任何操作。

1:5 %>% accumulate(`+`)
#> [1]  1  3  6 10 15

即使提供了 .init,情况也是一样的,在这种情况下,输出向量的第一个元素将等于提供的 .init。 (参见 Ronak 的示例)

library(purrr)
1:5 %>% accumulate(`+`, .init = 3)
#[1]  3  4  6  9 13 18

现在检查输出向量中是否有六个元素,尽管输入向量中有五个元素 (1:5)。

您认为给定输出的第一个元素应该是 3 的逻辑是正确的,但在大多数情况下,输出向量的要求与输入向量的长度相同。因此,开发人员可能会考虑在没有任何 operation/application 功能的情况下包含第一个元素。