2016-03-26 122 views
3

我想根據通過複選框輸入動態選擇的列來設置我的數據。 有沒有什麼方法可以讓我的輸入文件在我的代碼 全球可用,以便進一步的操作可以很容易地執行。R shiny:基於複選框組輸入的子集數據

以下是我的代碼:

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

我想喲你需要在dInput上輸入reactive,並在你的過濾數據中增加一個。然後您可以使用data_table()(與())進一步操作。下面的(單個文件)代碼在我的機器上正常工作。我還刪除了observe(無用),並更改了返回的dInput(實際文件而不是colnames)。

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

正是我需要的。非常感謝 –

相關問題