Вот один из способов использования 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 () - функция с двумя аргументами. Функция будет передана
накопленное значение в качестве первого аргумента и «следующее» значение как
второй аргумент.
По проекту reduce
требуется аргумент x
и y
. Хотя вы должны передать обе функции, вы можете не использовать y
, как я это сделал. Это означает, что ваша функция рекурсивно использует только накопленное значение.
Промежуточные шаги можно увидеть, используя purrr::accumulate
-
rep(x, n+1) %>% accumulate(function(x, y) x + 3)
# [1] 1 4 7 10 13 16
Обратите внимание, что функция не была применена к первому экземпляру, и поэтому вам нужно n+1
в rep
, чтобы получить правильный результат.
РЕДАКТИРОВАТЬ 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:
Вот аналогичное, но более простое решение base R -
Reduce(function(x, y) x + 3, 1:n, init = x)
# [1] 16