闪亮:选择选项自动获取数据变量

时间:2013-08-29 06:49:26

标签: r shiny

我正在尝试在ui中执行select选项,它应该自动从输入数据中将变量名称添加到列表中。这里我在select选项中使用了 list(ls(input.file1),但是它没有用。

请帮帮我。

ui.R:

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "Demand Forecast", "Flowserve"),
  sidebarPanel(
    fileInput('file1', 'Select csv file',
              accept=c('text/csv')
              ),
    checkboxInput('header', 'Header', TRUE),
    radioButtons('sep', 'Separator',
                 c(Comma=',', Semicolon=';', Tab='\t')
                 ),
    tags$hr(),
    selectInput("product", "Select Product",
                  list(ls(input.file1))

                )
))

server.R:

library(shiny)
shinyServer(function(input,output){

#Assigning data to a variable "data1"  
  data1 = reactive({
  inFile<-input$file1
  if(is.null(inFile))
  return(NULL)
  read.csv(inFile$datapath, header=input$header, sep=input$sep)
  })

  sub=reactive({
      subset(data1(), select=paste0(input$product))
  })

 output$contents<-renderTable({
       if (is.null(input$file1)) { return() }                            
           sub()
       })
 })

以下是csv示例:

Product1    Product2    Product3
5             10               17
8             16               26
10            20               32
16            32               50
18            36               56
20            40               62

1 个答案:

答案 0 :(得分:4)

如果您在代码中看到ls(),那几乎总是错误的。然而,棘手的部分是从服务器设置一个ui项:你需要更新----系列函数。

以下是将csv名称填入产品表的部分。您必须添加一些标准代码才能进行填充。

#server.r
library(shiny)
shinyServer(function(input,output,session){

  observe({
    inFile<-input$file1
    print(inFile)
    if(is.null(inFile))
      return(NULL)
    dt = read.csv(inFile$datapath, header=input$header, sep=input$sep)
    ## Decide later what to do with the data, here we just fill
    updateSelectInput(session, "product", choices = names(dt))
  })
})

#ui.r
library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "Demand Forecast", "Flowserve"),
  sidebarPanel(
    fileInput('file1', 'Select csv file',
              accept=c('text/csv')
    ),
    checkboxInput('header', 'Header', TRUE),
    radioButtons('sep', 'Separator',
                 c(Tab='\t', Comma=',', Semicolon=';' )
    ),
    tags$hr(),
    selectInput("product", "Select Product","")
    ),
  mainPanel(tableOutput('contents'))

  ))