我有一个闪亮的应用程序,它选择xlsx/csv文件并将其上传到系统,上传后,我希望填充我提取到selectInput()
或的数据表的列名称selectizeInput()
.
以下代码表示用户上载数据文件的事件
ui.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") ) ) ))
server.R
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) } }) } )
很公平,我现在有一个工作系统的输入,可以从Excel源或文本/ CSV中获取数据.此后,我希望创建一个动态列表,将值传递colnames(output$table)
给我的ui.R并将其放入指定的位置.
我该怎么做?
我尝试过使用uiOutput()
Mason DeCamillis的答案如何从服务器.R到ui.R获取选项的矢量,用于Shiny R App中的selectInput,但R给我一个"找不到对象"的错误.
此外,我发现我必须使用reactive()
能够将数据传递到UI和服务器.但不知道,我该怎么做.
您可以将上传的表存储data
在您的变量中,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
,添加uiOutput("selector")
您希望列表的位置.