我写了一个小的闪亮应用程序来测试用户上传数据的变量选择功能。这是我的代码:
ui.R
shinyUI(pageWithSidebar(
headerPanel("CSV Data explorer"),
sidebarPanel(
fileInput('datafile', 'Choose CSV file',
accept=c('text/csv', 'text/comma-separated-values,text/plain')),
htmlOutput("varselect", inline=TRUE),
selectInput("vars", "Select a variable:",choices=htmlOutput("varselect")),
br()
),
mainPanel(
dataTableOutput("table")
)
))
服务器.R
shinyServer(function(session,input, output) {
Dataset <- reactive({
infile <- input$datafile
if (is.null(infile)) {
return(NULL)
}
read.csv(infile$datapath)
})
observe({
output$varselect <- renderUI({
if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)
updateSelectInput(session, inputId="vars", label="Variables to use:",
choices=names(Dataset()), selected=names(Dataset()))
})
})
output$table <- renderDataTable({
if (is.null(input$vars) || length(input$vars)==0) return(NULL)
return(Dataset()[,input$vars,drop=FALSE])
})
})
如果你继续在你的任何csv文件上测试它,你会看到2个问题:1.selectInput()框上方显示的所有变量名称都很混乱,这是由以下代码引起的:
htmlOutput("varselect",inline=TRUE)
但如果我删除这行代码,我的selectInput将消失。
- 如果我更改为
selectInput("vars","Select a variable:",choices=htmlOutput("varselect"),multiple=TRUE),
并尝试点击多个选项,这不会反映在主面板的表格中。
我已经为这个问题挣扎了一段时间。有人能帮忙吗!提前数百万感谢!
谨致问候,mindy
我认为您的工作过于复杂。简而言之,您只需要一个uiOutput
来代替ui中的htmlOutput
和selectInput
语句。R。似乎也不需要updateSelectInput
或observe
函数。您可以将代码简化为以下内容,多选似乎可以正常工作:
ui.R
shinyUI(pageWithSidebar(
headerPanel("CSV Data explorer"),
sidebarPanel(
fileInput('datafile', 'Choose CSV file',
accept=c('text/csv', 'text/comma-separated-values,text/plain')),
uiOutput("varselect"),
br()
),
mainPanel(
dataTableOutput("table")
)
))
服务器.R
shinyServer(function(session,input, output) {
Dataset <- reactive({
infile <- input$datafile
if (is.null(infile)) {
return(NULL)
}
read.csv(infile$datapath)
})
output$varselect <- renderUI({
if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)
cols <- names(Dataset())
selectInput("vars", "Select a variable:",choices=cols, selected=cols, multiple=T)
})
output$table <- renderDataTable({
if (is.null(input$vars) || length(input$vars)==0) return(NULL)
return(head(Dataset()[,input$vars,drop=FALSE]))
})
})