使用上传文件中的数据创建多个闪亮的小部件

时间:2015-03-30 22:44:54

标签: r shiny

shiny中,如何使用tagList内的renderUI来创建使用上传文件中的数据自定义的多个小部件?这个想法被引用here,但似乎没有关于tagList的非常好的文档。

我打算在这里回答我自己的问题。我做了一些研究,发现这个过程的一个简单例子是缺乏的,并且觉得有必要做出贡献,以便其他人可能受益。

1 个答案:

答案 0 :(得分:3)

在server.R中,使用reactive()语句定义对象以保存上载文件的内容。然后,在renderUI语句中,在tagList函数中包含逗号分隔的窗口小部件定义列表。在每个窗口小部件中,使用包含上载文件内容的对象作为窗口小部件参数。下面的示例hosted at shinyapps.ioavailable on github使用基于上传文件定义的歌手renderUI创建checkBoxGroupInput和radioButtons小部件。

<强> server.R

library(shiny)
shinyServer(function(input, output) {  

  ItemList = reactive(
    if(is.null(input$CheckListFile)){return()
    } else {d2 = read.csv(input$CheckListFile$datapath)
            return(as.character(d2[,1]))}
  )

  output$CustomCheckList <- renderUI({
    if(is.null(ItemList())){return ()
    } else tagList(
      checkboxGroupInput(inputId = "SelectItems", 
                         label = "Which items would you like to select?", 
                         choices = ItemList()),
      radioButtons("RadioItems", 
                   label = "Pick One",
                   choices = ItemList(), 
                   selected = 1)
    )
  })
})

<强> ui.R

library(shiny)
shinyUI(fluidPage(
  titlePanel("Create a checkboxGroupInput and a RadioButtons widget from a CSV"),
  sidebarLayout(
    sidebarPanel(fileInput(inputId = "CheckListFile", label = "Upload list of options")),
    mainPanel(uiOutput("CustomCheckList")
    )
  )
))