【发布时间】:2021-04-13 08:53:54
【问题描述】:
我正在尝试在 Shiny 中构建简单的 csv 上传示例。上传 csv 文件,将标题存储在 Select Input 控件中,并在表格输出中显示每一列。一旦我上传任何 csv 文件,它就会显示以下错误
[.data.frame 中的错误:选择了未定义的列
但是,如果再次上传相同的 csv 文件,则不会显示错误。
library(shiny)
library(shinyjs)
ui <- pageWithSidebar(
headerPanel("CSV Upload test"),
sidebarPanel(
fileInput("datafile", h5("Choose CSV file:"),
accept=c('text/csv', 'text/comma-separated-values,text/plain')),
htmlOutput("varselect", inline=TRUE),
selectInput("vars", label = h5("Select a variable:"), choice=NULL, selected = NULL,
multiple=FALSE, selectize=TRUE),
actionButton("unselect", label="Clear All"),
br()
),
mainPanel(dataTableOutput("table")))
server <- function(session,input, output) {
Dataset <- reactive({
infile <- input$datafile
if (is.null(infile)) {
return(NULL)
}
read.csv(infile$datapath)
})
observe({
if (identical(Dataset(), '') || identical(Dataset(),data.frame()))
return(NULL)
updateSelectInput(session, inputId="vars",
choices=names(Dataset()), selected=NULL)
})
observe({
if (input$unselect > 0) {
if (identical(Dataset(), '') || identical(Dataset(),data.frame()))
return(NULL)
updateSelectInput(session, inputId="vars",
choices=names(Dataset()), selected=NULL)
}
})
output$table <- renderDataTable({
if (is.null(input$vars) || length(input$vars)==0) return(NULL)
validate(need(Dataset(), "Awaiting data"))
return(Dataset()[,input$vars,drop=FALSE])
})
}
shinyApp(ui, server)
同样在 selectInput 函数中,如果我将选项更改为多个 = TRUE,则不会在 csv 上传开始时显示此错误。
selectInput("vars", label = h5("Select a variable:"), choice=NULL, selected = NULL,
multiple=FALSE, selectize=TRUE)
如果有人可以帮助我了解这里发生的事情,我将不胜感激。有什么解决办法吗?
【问题讨论】:
-
我能够让您的代码正常运行。也许您想检查您使用的是哪个版本的
shiny和shinyjs。