这是使用purrr::reduce 的一种方式。这有点作弊(也许不是?)但似乎有效。在下面的演示中,我将 3 递归地添加到初始值 5 次 -
library(purrr)
x <- 1
n <- 5
rep(x, n+1) %>% reduce(function(x, y) x + 3)
# [1] 16
这是reduce 的文档-
.x 列表或原子向量。
.f 对于 reduce(),一个 2 参数函数。该函数将被传递
累加值作为第一个参数,“下一个”值作为
第二个参数。
根据设计,reduce 需要 x 和 y 参数。虽然您必须将两者都传递给您的函数,但您可以选择不使用 y ,就像我所做的那样。这意味着您的函数仅递归地使用累积值。
可以使用purrr::accumulate查看中间步骤-
rep(x, n+1) %>% accumulate(function(x, y) x + 3)
# [1] 1 4 7 10 13 16
请注意,该函数未应用于第一个实例,这就是为什么您需要 rep 中的 n+1 才能获得正确的结果。
编辑 1:
这是上述逻辑的简化版本 -
reduce(1:n, function(x, y) x + 3, .init = x)
# [1] 16
accumulate(1:n, function(x, y) x + 3, .init = x)
# [1] 1 4 7 10 13 16
编辑 2:
这是一个类似但更简单的基本 R 解决方案 -
Reduce(function(x, y) x + 3, 1:n, init = x)
# [1] 16