【问题标题】:Detect columns in an uploaded csv in R shiny app在 R 闪亮的应用程序中检测上传的 csv 中的列
【发布时间】:2021-02-22 20:15:40
【问题描述】:

我想创建一个闪亮的应用程序,可以在其中上传 csv 文件,然后选择该文件的列。问题是上传文件后,我的代码无法更新列名以获取可能的选择。这是一个可重现的例子。谢谢!

ui <- fluidPage(  
                    fileInput("file1",
                            "Please choose a csv File",
                            multiple = FALSE,
                            accept   = c("text/csv",
                                         "text/comma-separated-values,text/plain",
                                         ".csv")),
                  
                  
                  div(style="display:inline-block", selectInput('var',
                                                                'Select the first var',
                                                                "") )
)

server <- function( input, output, session ) {
  
  data <- reactive({ 
    
    inFile <- input$file1
    
    req(inFile) 
    
    validate(need(ext == "csv", "Please upload a csv file"))
    
    df =     read.csv(inFile$datapath,
                      header = input$header,
                      sep    = input$sep,
                      quote  = input$quote)
    
    colnames <- names(df)
    
    df
  })
  
  
  output$contents <- renderTable( { 
    updateSelectInput(session, 
                      inputId  = 'var', 
                      label    = 'Select the first var',
                      choices  = colnames) 
  } ) }

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 您的代码没有运行,因为输出不存在。请改用observeEvent
  • 并使用choices = names(data()) 让它反应

标签: r shiny


【解决方案1】:

您的一些反应式表达不正确,让我们分开一些内容以便更容易理解。特别是使用observeEvent 来观察文件输入。


library(shiny)

ui <- fluidPage(  
    
    fileInput("myfileinput", "Please choose a csv File", multiple = FALSE, accept = c("text/csv", "text/comma-separated-values,text/plain", ".csv")),
    
    selectInput('myselectinput','Select the first var', ""),
    
    tableOutput('mytable')
    
)

server <- function(input, output, session) {
    
    #Reactive to store loaded data
    reactives <- reactiveValues(
        
        mydata = NULL
        
    )
    
    #Observe file being selected
    observeEvent(input$myfileinput, {
        
        #Store loaded data in reactive
        reactives$mydata <- read.csv(file = input$myfileinput$datapath)
        
        #Update select input
        updateSelectInput(session, inputId = 'myselectinput', label = 'Select the first var', choices  = colnames(reactives$mydata))
        
    })
    
    #Data table
    output$mytable <- renderTable({ 
        
        reactives$mydata
        
    })
    
}
    
shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2019-04-09
    • 2020-06-16
    • 1970-01-01
    • 2015-10-14
    • 2016-10-23
    • 2017-02-28
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多