2016-03-26 15 views
3

Ich möchte meine Daten basierend auf den dynamisch ausgewählten Spalten durch Kontrollkästchen-Eingabe festlegen. Gibt es eine Möglichkeit, wie ich meine Eingabedatei in meinem Code global verfügbar machen kann, so dass weitere Operationen leicht durchgeführt werden können.R glänzend: Subset-Daten basierend auf checkboxgroupinput

Im Anschluss ist mein Code:

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") 
    ) 
) 
)) 

ich folgende Störung zu erhalten, während tableOutput Anzeige ("data_table")

Error : invalid first argument  
+0

Setzen Sie eine 'print (Eingabe $ Spalten)' vor Ihrer 'Kopf (dat, 20)' Anweisung, um zu sehen, ob die richtigen Spalten ausgewählt sind – SymbolixAU

Antwort

1

Ich denke yo Sie benötigen eine reactive auf Ihrem dInput und fügte eine weitere auf Ihre gefilterten Daten. Sie können dann data_table() (mit der ()) für weitere Operationen verwenden. Der unten stehende (einzelne Datei) Code funktioniert auf meinem Computer einwandfrei. Ich entferne auch die observe (unbrauchbar) und änderte, was dInput zurückgibt (die tatsächliche Datei anstatt 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) 

ist das, was Sie wollen?

+0

versuchte dies, aber keine Änderung der Ausgabe .. Vermisse ich etwas? –

+0

Genau das, was ich brauchte. Ich danke dir sehr –

Verwandte Themen