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

时间:2017-03-08 05:18:00

标签: r shiny checkboxlist

编辑:完整代码

数据文件:https://drive.google.com/file/d/0B_sB3ef_9RntOWJjNlhrUjk3a1k/view 不确定如何在stackoverflow中共享数据文件。所以在谷歌驱动器中给了一个附件。如果有其他选择,请告诉我。

我无法根据输入的csv数据在Shiny App中创建动态复选框过滤器。我需要用户输入数据文件(.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:\Users\userName\Documents\dummt/server.R#8]
    80: data_attr
    79: renderUI [C:\Users\userName\Documents\dummt/server.R#18]
    78: func
    77: origRenderFunc
    76: output$CountryList
     1: runApp

1 个答案:

答案 0 :(得分:0)

您收到的错误是因为您的.table read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)包含input$sepinput$headerinput$stringAsFactors未定义的UI输入元素,因此值为NULL。现在我给了那些硬编码值。如果您以后需要,可以定义UI元素。

除此之外,我修改了您的代码,以便您根据需要获得输出。我为input$file_attr添加了一个observeEvent,以便在上传文件后触发渲染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())
    })

  }) 

})

希望它有所帮助!