首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解累积函数是如何工作的

理解累积函数是如何工作的
EN

Stack Overflow用户
提问于 2021-02-07 04:20:04
回答 2查看 1.4K关注 0票数 4

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

代码语言:javascript
运行
复制
1:5 %>% accumulate(`+`)
#> [1]  1  3  6 10 15

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-07 05:27:02

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

代码语言:javascript
运行
复制
1:5 %>% accumulate(`+`)

#means

accumulate(1:5, `+`)

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

代码语言:javascript
运行
复制
1:5 %>% accumulate(`+`)
#> [1]  1  3  6 10 15

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

代码语言:javascript
运行
复制
library(purrr)
1:5 %>% accumulate(`+`, .init = 3)
#[1]  3  4  6  9 13 18

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

您的逻辑是,给定输出的第一个元素应该是3,这是正确的,但在大多数情况下,输出向量的要求与输入的长度相同。因此,开发人员可能会考虑将第一个元素作为第一个元素,而不需要任何函数的操作/应用。

票数 5
EN

Stack Overflow用户

发布于 2021-02-07 04:33:33

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

来自?accumulate

.init -如果提供,将用作开始积累的第一个值,而不是使用.x[1]。

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

代码语言:javascript
运行
复制
library(purrr)
1:5 %>% accumulate(`+`, .init = 3)
#[1]  3  4  6  9 13 18
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66084519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档