来自输出(server.r)的闪亮复选框动态值



编辑:完整代码

数据文件:https://drive.google.com/file/d/0b_sb3ef_9rntowjjnlhrujk3a1k/view不确定如何在Stackoverflow中共享数据文件。因此,在Google Drive中给出了附件。请让我知道是否有其他选择。

我在基于输入CSV数据中在Shiny应用中创建动态复选框过滤器遇到困难。我需要用户输入数据文件(.csv),并在该文件中使用" country"列以作为复选框过滤器显示在UI中。但是,我遇到了错误。

这是我的代码。我尝试了不同的方式,但没有用。请帮助!

server.r

library(shiny)
shinyServer(function(input, output) {     
    data_attr <- reactive({
      file1 <- input$file_attr
      if(is.null(file1)){return()} 
      list(read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors))
    })
  countries <- reactive({
    if(is.null(data_attr()$Country)){return()}
    data_attr()$Country
  })
  output$CountryList <- renderUI({
    if(is.null(data_attr()$Country)){return()}
    checkboxGroupInput('show_vars', 'Country Filter',
                       as.list(countries))
  })
})

ui.r

library(shiny)
shinyUI(fluidPage(
  navbarPage(
    "Tab_name",
    tabPanel("Engine",
             bootstrapPage(
               div(style="display:inline-block", fileInput("file_attr", "attributes:")),
               uiOutput("CountryList")
             )
    )
  )
))

错误:

Listening on http://127.0.0.1:4017
Warning: Error in !: invalid argument type
Stack trace (innermost first):
    92: read.table
    91: <reactive:data_attr> [C:UsersuserNameDocumentsdummt/server.R#8]
    80: data_attr
    79: renderUI [C:UsersuserNameDocumentsdummt/server.R#18]
    78: func
    77: origRenderFunc
    76: output$CountryList
     1: runApp

您遇到的错误是因为您的读取.Table read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)input$sepinput$headerinput$stringAsFactors THA是未定义的UI输入元素,因此值为无效。目前,我给了这些值的硬编码值。如果您稍后需要,可以定义UI元素。

除此之外,我已经修改了您的代码,以便您根据需要获得输出。我添加了input$file_attr的观察值,以便在您上传文件后触发UI。

server <- shinyServer(function(input, output) {     
  data_attr <- reactive({
    file1 <- input$file_attr
    if(is.null(file1)){return()} 
    read.table(file=file1$datapath, sep=",",, header = TRUE, stringsAsFactors = FALSE)
  })
  countries <- reactive({
    if(is.null(data_attr()$Country)){return()}
    data_attr()$Country
  })

  observeEvent(input$file_attr, {
    output$CountryList <- renderUI({
      if(is.null(data_attr()$Country)){return()}
      checkboxGroupInput('show_vars', 'Country Filter',
                         countries())
    })
  }) 
})

希望它有帮助!

最新更新