使用string作为名称来创建新的输出元素

时间:2016-04-17 19:30:32

标签: r shiny

我正在寻找一种方法,可以动态地为output分配值。 我们的想法是,每次点击一个操作按钮,新的渲染对象(例如text_1text_2,...)都会保存在output中。为了达到这个目的,我已经有一个变量,当使用按钮时,该变量增加1。现在,我想使用一些常量字符串和此变量来为输出对象创建一个名称(类似于paste0("output$text_",i)。我遇到的问题是我只知道如何向{{1}添加内容与output。但这样我就不能使用字符串作为变量名称(至少我是这么认为)。使用<-它不起作用。还有另一种方法做我想做的事情?

assign

1 个答案:

答案 0 :(得分:1)

此解决方案基于https://gist.github.com/wch/5436415/。我希望它有所帮助:)

library(shiny)


ui <- shinyUI(fluidPage(

   titlePanel(""),

   sidebarLayout(
      sidebarPanel(
         sliderInput("number", "Some numbers", min = 1, max = 10, value = 1)
      ),

      mainPanel(
        uiOutput("dynamic")
      )
   )
))

server <- shinyServer(function(input, output) {

  output$dynamic <- renderUI({
    text_output_list <- lapply(1:input$number, function(i) {
      textname <- paste("text_", i, sep = "")
      textOutput(textname)
    })
    do.call(tagList, text_output_list)
  })

  for (i in 1:1000) {

    local({
      my_i <- i
      textname <- paste("text_", my_i, sep = "")
      output[[textname]] <-  renderText({ paste("Hi", my_i) })
    })
  }
})

# Run the application 
shinyApp(ui = ui, server = server)