Итерация с purrr :: redu () - PullRequest
       29

Итерация с purrr :: redu ()

1 голос
/ 25 апреля 2020

Учитывая функцию 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

Создано в 2020-04-24 с помощью представительного пакета (v0.3.0)

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

В базе R вы можете использовать Reduce с accumulate = TRUE.

Reduce(f, 2:4, init = 3, accumulate = TRUE)
#[1]  3  6 18 72
1 голос
/ 25 апреля 2020

Здесь вы, похоже, следуете после

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

Значение .x представляет ваше предыдущее значение, а .y - это следующие элементы из вектора, в который вы добавляете данные. Вместо жесткого кодирования a=3 в функцию, мы передаем, что через .init= она происходит только на первой итерации.

...