闪亮 - 使用读入文件中的列标题作为selectInput选项

时间:2015-06-18 04:15:22

标签: r shiny

我正在尝试创建一个应用,用户可以上传CSV然后与数据进行交互。 具体问题是我未能将读取的文件中的列标题传递给selectInput函数。

如果你注释掉观察功能的最后几行,应用程序可以正常工作。已经尝试了很多选项,使用被动而不是renderTable等。有一些类似的问题围绕着改变选择输入,但是没有我可以从读入的文件中看到。似乎缺少任何内容&#39 ;首先是问题?

require(shiny)
runApp(
list(
ui = fluidPage(
  sidebarPanel(fileInput('file1', 'Choose CSV File',
                         accept=c('text/csv', 
                                  'text/comma-separated-values,text/plain', 
                                  '.csv')),
               selectInput("inSelect", "Select something", choices = "Pending Upload")
  ),
  mainPanel(
    tableOutput("contents"))
),

server = function(input, output) {
    output$contents <- renderTable({
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath)
  })

  observe({
    updateSelectInput(session, "inSelect", choices = names(contents()))
  })

}
)

测试CSV

Col1,Col2,Col3
2,3,4
5,6,7

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。要使updateSelectInput生效,您需要将session对象传递给shinyServer函数。

然后,您必须创建一个读取输入文件的reactive上下文。这是必需的,因为此操作的结果既用于创建输出表,也用于更改selectInput的值。

这应该有效:

server = function(input, output, session) {
  contentsrea <- reactive({
     inFile <- input$file1
     if (is.null(inFile))
        return(NULL)
     read.csv(inFile$datapath)
  })
  output$contents<-renderTable({contentsrea()})
  observe({
     updateSelectInput(session, "inSelect", choices = names(contentsrea()))
  })
}