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 に答える