如何使用lapply在Shiny中创建反应对象?

时间:2019-07-01 23:04:26

标签: r shiny lapply

我目前有一个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 :(得分:0)

尝试一下:

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

答案 1 :(得分:0)

您可以将电抗性导体放在列表中:

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

然后通过执行reactives[["repFunction1"]]reactives[[1]]来调用第一个。