如何在闪亮的应用程序中从UI中选择数据后,将值(选项)传递给selectizeInput()?

时间:2015-12-30 06:19:17

标签: r shiny

我有一个闪亮的应用程序,它选择xlsx / csv文件并将其上传到系统,上传后,我希望将我提取的数据表的列名填充到selectInput()或{{1 }}

以下代码表示用户 上传数据文件的事件

ui.R

selectizeInput()

server.R

    library(markdown)
    require(XLConnect)


    shinyUI(navbarPage(img(class="img-polaroid",
       src=paste0("http://www.iconsdb.com/icons/preview/black/stackoverflow-5-xl.png")),

       tabPanel("Table",
          titlePanel("Select Data"),
          sidebarLayout(
             sidebarPanel(
                selectInput("fileType", "Select File Type:",
                   c("MS Excel Worksheet (xls,xlsx)" = "xls",
                      "Text/CSV (.csv)" = "csv"
                      )
                   ),
                fileInput('file1', 'Choose file to upload',
                   accept = c(
                      'text/csv',
                      'text/comma-separated-values',
                      'text/tab-separated-values',
                      'text/plain',
                      '.csv',
                      '.tsv',
                      'application/vnd.ms-excel',
                      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                      '.xlsx',
                      '.xls'
                   )
                ),
                tags$hr(),
                checkboxInput('header', 'Header', TRUE),
                radioButtons('sep', 'Separator',
                   c(Comma=',',
                      Semicolon=';',
                      Tab='\t'),
                   ','),
                radioButtons('quote', 'Quote',
                   c(None='',
                      'Double Quote'='"',
                      'Single Quote'="'"),
                   '"'),
                tags$hr()


             ),
             mainPanel(
                dataTableOutput('table')
             )
          )

       ),
       tabPanel("Plot",
          sidebarLayout(
             sidebarPanel(
                radioButtons("plotType", "Plot type",
                   c("Scatter"="p", "Line"="l")
                )
             ),
             mainPanel(
                plotOutput("plot")
             )
          )
       ),
       navbarMenu("More",
          tabPanel("Summary",
             verbatimTextOutput("summary") 
          )
       )
    ))

很公道,我现在有一个工作系统的输入,可以从Excel源或文本/ CSV中获取数据。此后,我希望创建一个动态列表,将shinyServer( function(input, output, session) { output$plot <- renderPlot({ plot(data$Count,data$Sales, type=input$plotType) }) output$summary <- renderPrint({ summary(data) }) output$table <- renderDataTable({ inFile <- input$file1 if (is.null(inFile)) return(NULL) if(input$fileType=='csv'){ table1<-read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote) return(table1) } else if(input$fileType=='xls'){ table1 <- readWorksheetFromFile(inFile$datapath, sheet=1) } }) } ) 的值传递给我的ui.R并将其放入指定的位置。

我该怎么做?

我尝试使用来自Mason DeCamillis对How to get vector of options from server.R to ui.R for selectInput in Shiny R App的答案的colnames(output$table)但是R给我一个“找不到对象”的错误。

此外,我发现我必须使用uiOutput()能够将数据传递到UI和服务器。但没有任何线索,我该怎么做。

1 个答案:

答案 0 :(得分:8)

您可以将上传的表格存储在data的{​​{1}}变量中,并使用您发布的链接中的代码填充server.R

selectInput中,你可以这样做:

server.R

并在data <- reactive({ inFile <- input$file1 if (is.null(inFile)) return(NULL) if(input$fileType=='csv'){ table1<-read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote) return(table1) } else if(input$fileType=='xls'){ table1 <- readWorksheetFromFile(inFile$datapath, sheet=1) } }) output$table <- renderDataTable({ data() }) output$selector <- renderUI({ selectInput("var", "Choose name:", as.list(colnames(data()))) }) 中,将ui.R添加到您希望列表所在的位置。