如何在server.R中使用data.frame来更新ui.R中的选择菜单?

时间:2015-12-24 23:19:53

标签: r shiny

这是我对该网站的计划: 1.我使用文件上传从本地计算机读取csv文件,使用以下代码:

datatable <- reactive({
    inFile <- input$file1
      if (is.null(inFile))
    return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep,       quote=input$quote)
})
  1. 在我的ui.R中,我将使用一个选择菜单来显示数据表的所有列名。我会从这里选择更多的名字,比如2。
  2. 根据我选择的列名,我将生成一些图。 所以,这是我的问题:
  3. 如何从sever.R中生成的data.frame中获取ui.R中的列名?
  4. 如何将ui.R中挑选的名称传回服务器.R以便生成图表? 我读了一些例如http://shiny.rstudio.com/gallery/update-input-demo.html或者关于renderUI的例子,但我不知道如何使用它们,或者它们是正确的方法。
  5. 非常感谢。

    这是我的所有代码。在server.R中:

    library(shiny)
    options(shiny.maxRequestSize=300*1024^2)
    shinyServer(function(input, output) {
      datatable <- reactive({
        inFile <- input$file1
        if (is.null(inFile))
           return(NULL)
        read.csv(inFile$datapath, header=input$header, sep=input$sep, quote=input$quote)
     })
     output$contents <- renderDataTable({
        datatable()
     }, options = list(orderClasses = TRUE))
     output$summary <- renderPrint({
        summary(datatable(),20)
        aaa <- "afefagfaegar"
        list(summary(datatable(),20),aaa)
     })
    })
    

    这是ui.R中的代码

    library(shiny)
    shinyUI(navbarPage("",
                       tabPanel("Data Summary",
                                fluidPage(
                                  titlePanel("Uploading Files"),
                                  sidebarLayout(
                                    sidebarPanel(
                                      width=2,
                                      fileInput('file1', 'Choose CSV File',
                                            accept=c('text/csv','text/comma-separated-values,text/plain','.csv')),
                                      tags$hr(),
                                      checkboxInput('header', 'Header', TRUE),
                                      radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','),
                                      radioButtons('quote', 'Quote',c(None='','Double Quote'='"','Single Quote'="'"),'"')
                                  ),
                                    mainPanel(
                                       tabsetPanel(type = "tabs", 
                                                  tabPanel("Table", dataTableOutput('contents')),
                                                  tabPanel("Summary", verbatimTextOutput("summary")) 
                                                  )
                                      )
                                    )
                                  )
                                ),
                       tabPanel("Single factor",
                                fluidPage(
                                  sidebarLayout(
                                    sidebarPanel(
                                      ***#I think I should put sth here for the select menu***
                                    ),
                                    mainPanel()
                                  )
                                )
                       ),
                       tabPanel("Multiple factors")
            )
    )
    

    非常感谢你们。

1 个答案:

答案 0 :(得分:1)

我想我知道如何做到这一点。 在server.R中,我把:

output$singlefactor <- renderUI({
    selectInput("sfactor", "Feature selection:", names(datatable()))
  })

在ui.R,我喜欢:

uiOutput("singlefactor")

到目前为止,一切都很好。