2015-12-30 11 views
5

xlsx/csvファイルを選択してシステムにアップロードしてアップロードした後、抽出したデータテーブルの列名をselectInput()またはselectizeInput()に設定したいと思います。どのように光沢のあるアプリでUIからデータを選択した後にselectInput()に値(選択肢)を渡すのですか?

以下のコードは、

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に渡し、指定された場所に配置する動的リストを作成したいと思います。

どうすればよいですか?


私はHow to get vector of options from server.R to ui.R for selectInput in Shiny R AppにメイソンDeCamillisの答えからuiOutput()を使用して試してみましたが、Rは、「オブジェクトが見つかりません」というエラーを私に投げています。

また、私はUIとサーバーに前後にデータを渡すことができるように、私はreactive()を使用しなければならないと私に思いました。しかし、何の手がかりも、私はそれをどうやって行うのですか?

+0

[こちらの記事](http://shiny.rstudio.com/articles/dynamic-ui.html)は、下記の@NicEの回答を理解しようとする人にとって参考になる情報です。シャイニー – alistaire

答えて

8

server.Rの変数dataにアップロードしたテーブルを保存し、投稿したリンクのコードを使用して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")を追加します。

+0

そして、 'server.R'で選択した変数を再び使用するにはどうすればいいですか? 'print(output $ selector)'が 'Object output not found'エラーを投げています。次のステートメントは正しいメソッドですか? '012<@reactive(出力$ selector < - renderUI({ selectInput(" var "、" Choose name: "、as.list(colnames(data)))) }))' – sunitprasad1

+0

@ sunitprasad1 'input $ selector'を実行して、選択した変数の値を通常どおりに取得します。だから、あなたは 'var < - reactive({x < - input $ selector; print(x)})'のようになります。 – user5029763

関連する問題