【问题标题】:R Shiny Error in [.data.frame: undefined columns selected[.data.frame 中的 R Shiny 错误:选择了未定义的列
【发布时间】: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)    

如果有人可以帮助我了解这里发生的事情,我将不胜感激。有什么解决办法吗?

【问题讨论】:

  • 我能够让您的代码正常运行。也许您想检查您使用的是哪个版本的shinyshinyjs

标签: r shiny file-io


【解决方案1】:

以下内容消除了您的错误:

  output$table <- renderDataTable({
    validate(need(Dataset(), "Awaiting data"))
    if (is.null(Dataset()) || is.null(input$vars) || length(input$vars)==0) {
      return(NULL)
    } else{
      selected_vars <- names(Dataset()) %in% input$vars
      Dataset()[,selected_vars,drop=FALSE]
    }
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多