0

我正在尝试在 ui 中选择选项,它应该自动将变量名称从输入数据中提取到列表中。在这里,我在选择选项中使用了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))

                )
))

服务器.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
4

1 回答 1

4

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

这是将 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'))

  ))
于 2013-08-29T12:59:15.697 回答