Р: Как вывести рекурсивный или итеративный вывод функции / карты в вектор? - PullRequest
0 голосов
/ 05 ноября 2018

Я хотел бы передать выходные данные пользовательской функции обратно на вход (рекурсивное отображение), выполнить эту итерацию N раз и сохранить выходные данные каждой итерации в векторе. Это просто сделать с помощью цикла for

my_fun <- function(x) {x/3 +1} # a user-defined function (trivial example)

my_l <- c()

x <- 0 # initial condition

for(i in 1:10) {
  x <- my_fun(x)
  my_l[i] <- x
}

print(my_l)

>[1] 1.000000 1.333333 1.444444 1.481481 1.493827 1.497942 1.499314 1.499771 1.499924 1.499975

Выше работает, но кажется грубым Есть ли более короткий способ сделать это? Возможно, с Tidyverse / purrr?

1 Ответ

0 голосов
/ 05 ноября 2018

Мы можем использовать accumulate

library(tidyverse)
accumulate(1:10, ~ my_fun(.x), .init = 1)
#[1] 1.000000 1.333333 1.444444 1.481481 1.493827 1.497942 1.499314 1.499771 1.499924 1.499975 1.499992

Или с Reduce из base R

Reduce(function(x, y) my_fun(x), 1:10, init = 1, accumulate = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...