当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何在闪亮的应用程序中从UI中选择数据后,将值(选项)传递给selectizeInput()?》经验,为你挑选了1个好方法。

我有一个闪亮的应用程序,它选择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和服务器.但不知道,我该怎么做.



1> NicE..:

您可以将上传的表存储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")您希望列表的位置.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有