在shiny
中,如何使用tagList
内的renderUI
来创建使用上传文件中的数据自定义的多个小部件?这个想法被引用here,但似乎没有关于tagList
的非常好的文档。
我打算在这里回答我自己的问题。我做了一些研究,发现这个过程的一个简单例子是缺乏的,并且觉得有必要做出贡献,以便其他人可能受益。
答案 0 :(得分:3)
在server.R中,使用reactive()
语句定义对象以保存上载文件的内容。然后,在renderUI
语句中,在tagList
函数中包含逗号分隔的窗口小部件定义列表。在每个窗口小部件中,使用包含上载文件内容的对象作为窗口小部件参数。下面的示例hosted at shinyapps.io和available 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")
)
)
))