2016-03-26 16 views
3

チェックボックス入力で動的に選択された列に基づいてデータをサブセット化する必要があります。 入力ファイルを自分のコード でグローバルに利用できるようにする方法はありますか。これにより、さらなる操作を簡単に実行できます。私のコードが続きR shiny:checkboxgroupinputに基づくサブセットデータ

Server.R

library(shiny) 

    shinyServer(function(input, output) { 

    dInput <- reactive({ 
     inFile <- input$file1 
     if (is.null(inFile)) 
     return(NULL) 

    finput <- read.csv(inFile$datapath, header=TRUE, sep=',',quote="'") 
    fheaders <- names(finput) 
    return(fheaders) 
    }) 


    output$choose_columns <- renderUI({ 
         checkboxGroupInput("columns", "Choose columns", 
         choices = dInput(), 
         selected = NULL) 
    }) 


    # to observe in environment which columns are selected 
    observe({ print(input$columns) }) 


    output$data_table <- renderTable({ 
    # If missing input, return to avoid error later in function 
    if(is.null(input$file1)) 
     return() 

    # Get the data set 
    dat <- get(input$file1) 

    # Keep the selected columns 
    dat <- dat[, input$columns, drop = FALSE] 

    # Return first 20 rows 
    head(dat, 20) 
    }) 


}) 

ui.R

library(shiny) 

# Define UI for application 
shinyUI(fluidPage(

    # Application title 
    titlePanel("Subset a table"), 


    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 

     uiOutput("choose_columns") 
    ), 

    mainPanel(
     tableOutput("data_table") 
    ) 
) 
)) 

tableOutput( "data_table")を表示しながら、私は

次のエラーを取得しています
Error : invalid first argument  
+0

'head(dat、20)'文の前に 'print(input $ columns)'を入れて、正しい列が選択されているかどうか確認します。 – SymbolixAU

答えて

1

私はそう思いますdInputreactiveが必要です。また、フィルタリングされたデータにもう1つ追加してください。それ以降の操作にはdata_table()())を使用できます。以下の(単一ファイル)コードは、私のマシンで正常に動作します。 observe(役に立たない)を削除し、dInputが返すもの(実際のファイルではなく、ファイル名)を変更しました。

library(shiny) 

server <- shinyServer(function(input, output) { 

    dInput <- reactive({ 
    inFile <- input$file1 
    if (is.null(inFile)) 
     return(NULL) 
    else 
     return(read.csv(inFile$datapath, header=TRUE, sep=',',quote="'")) 
    }) 


    output$choose_columns <- renderUI({ 
    cn <- colnames(dInput()) 
    selectInput("columns", "Choose columns", 
      choices = cn, 
      selected = cn, 
      size=10, 
      multiple=TRUE, selectize=FALSE) 
    }) 

    data_table <- reactive({ 
    # If missing input, return to avoid error later in function 
    if(is.null(input$file1)) 
     return(NULL) 

    # Get the data set 
    dat <- dInput() 

    # Keep the selected columns 
    dat[, input$columns, drop = FALSE] 
    }) 

    output$data_table <- renderTable(data_table()) 

}) 


# Define UI for application 
ui <- shinyUI(fluidPage(

    # Application title 
    titlePanel("Subset a table"), 


    sidebarLayout(
    sidebarPanel(
     fileInput('file1', 'Choose CSV File', 
       accept=c('text/csv', 
         'text/comma-separated-values,text/plain', 
         '.csv')), 

     uiOutput("choose_columns") 
    ), 

    mainPanel(
     h3("Filtered table"), 
     tableOutput("data_table") 
    ) 
) 
)) 

shinyApp(ui, server) 

これは何ですか?

+0

はこれを試しましたが出力は変化しません。 –

+0

まさに私が必要としたもの。どうもありがとうございます –

関連する問題