给具有初始值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 = 4
,a
分配有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创建
您似乎在这里
2:4 %>% accumulate(~f(.y, .x), .init=3)
# [1] 3 6 18 72
.x
值表示您先前的值,.y
此处是管道中向量中的下一个元素。我们不是通过硬编码a=3
的功能,而是通过.init=
传递给它仅在第一次迭代中发生。
在基本R中,可以将Reduce
与accumulate = TRUE
一起使用。
Reduce(f, 2:4, init = 3, accumulate = TRUE)
#[1] 3 6 18 72