Как использовать lapply для создания реактивных объектов в Shiny? - PullRequest
1 голос
/ 02 июля 2019

В настоящее время у меня есть Shiny-код, для которого требуется несколько разных реактивных наборов данных, но которые последовательно генерируются до точки, где, я думаю, использование lapply будет иметь больше смысла по мере увеличения числа наборов данных.

repFunction1 <- reactive({
    iris$Species[1]
)}

repFunction2 <- reactive({
    iris$Species[2]
)}

repFunction3 <- reactive({
    iris$Species[3]
)}

Мои попытки реплицировать это с lapply выглядят следующим образом:

lapply(1:3, function(i){
    paste0('repFunction', i) <- reactive({
      iris$Species[i]
    })
})

#Both above and below don't work

lapply(1:3, function(i){
    assign(paste0('repFunction', i), reactive({
      iris$Species[i]
    })
  )
})

Поскольку оба эти метода не работают, есть ли способ сделать это без необходимости повторять один и тот же код снова и снова?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Вы можете поместить реактивные проводники в список:

reactives <- lapply(1:3, function(i){
  reactive({
    iris$Species[i]
  })
})
names(reactives) <- paste0('repFunction', 1:3)

Затем позвоните первому, набрав reactives[["repFunction1"]] или reactives[[1]].

0 голосов
/ 02 июля 2019

Попробуйте это:

lapply(1:3, function(i) {
  output[[ paste0("repFunction", i) ]] <- reactive({
    iris$Species[i]
  })
})
...