我阅读了使用accumulate的手册,说它是一个2参数函数。我不明白这个例子:
1:5 %>% accumulate(`+`)
#> [1] 1 3 6 10 15如果accumulate是一个2参数函数,那么它输出的第一个元素应该是3吗?因为1+2=3,为什么第一个元素可以是输出?
发布于 2021-02-07 05:27:02
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,这是正确的,但在大多数情况下,输出向量的要求与输入的长度相同。因此,开发人员可能会考虑将第一个元素作为第一个元素,而不需要任何函数的操作/应用。
发布于 2021-02-07 04:33:33
.init参数决定输出中的第一个值。如果您没有指定任何内容,它将将向量的第一个值作为输出中的第一个值返回(此处为1)。
来自?accumulate。
.init -如果提供,将用作开始积累的第一个值,而不是使用.x[1]。
您可以指定自己的.init参数。
library(purrr)
1:5 %>% accumulate(`+`, .init = 3)
#[1] 3 4 6 9 13 18https://stackoverflow.com/questions/66084519
复制相似问题