使用purrr :: reduce()进行迭代

问题描述 投票:1回答:2

给具有初始值f(a, x) = a*x的函数a = 3,假设有一个迭代,其中下一步将a分配给f(a, x)

  • 对于x = 2,然后将a分配给f(3, x = 2) = 6
  • 对于x = 3,然后将a分配给f(6, x = 3) = 18
  • 对于x = 4a分配有f(18, x = 4) = 72

如何使用purrr实现迭代?以下内容不太正确。

library(purrr)
a <- 3
f <- function(a, x) a*x

2:4 %>% reduce(~f(a, .))
#> [1] 18

2:4 %>% accumulate(~f(a, .))
#> [1]  2  6 18

reprex package(v0.3.0)在2020-04-24创建

r reduce purrr
2个回答
0
投票

您似乎在这里

2:4 %>% accumulate(~f(.y, .x), .init=3)
# [1]  3  6 18 72

.x值表示您先前的值,.y此处是管道中向量中的下一个元素。我们不是通过硬编码a=3的功能,而是通过.init=传递给它仅在第一次迭代中发生。


0
投票

在基本R中,可以将Reduceaccumulate = TRUE一起使用。

Reduce(f, 2:4, init = 3, accumulate = TRUE)
#[1]  3  6 18 72
© www.soinside.com 2019 - 2024. All rights reserved.