2016-12-08 8 views
2

Ich mache eine glänzende App, um Plots von hochgeladenen Daten zu erstellen. Eine Spalte in der Eingabedatei ist eine Kategorie. Ich möchte für jede eindeutige Kategorie ein Kontrollkästchen erstellen, aber ich denke, dass etwas fehlt. ui.RDynamisch createBoxGroup basierend auf einer Datei in glänzend erstellen

fluidPage(
    titlePanel("Dynamic Check Boxes"), 
    fluidRow(

    fileInput('file1', 'Upload a file'), 

    plotOutput('plot1'), 

    # This is where I'm trying to put the check boxes 
    uiOutput("ui") 
    ) 
) 

Hier ist meine server.R

categories = c() 
test_data = NULL 

function(input, output) { 

    # Trying to generate the check boxes 
    output$ui <- renderUI({ 
     if (is.null(input$input_type)) 
      return() 
     checkboxGroupInput('test', 'checkboxes', categories) 
    }) 

    output$plot1 <- renderPlot({ 

     inFile <- input$file1 

     if (is.null(inFile)) 
      return(NULL) 

     test_data <<- read.table(inFile$datapath, head = F) 
     categories <<- unique(test_data$V1) 

     ggplot(test_data, aes(V2, V3)) + geom_point(aes(colour=V1)) 

    }) 
} 

Die Testdatei I verwendet haben.

A 10 10 
A 1 2 
B 0 1 
C 5 5 
C 0 1 
C 5 11 
D 1 2 

Antwort

2

Anstatt globale Variablen verwenden, sollten Sie reactive verwenden:

function(input, output) { 
    # read the file 
    test_data <- reactive({ 
     inFile <- input$file1 
     if (is.null(inFile)) 
      return(data.frame(V1=character(0), V2=integer(0), V3=integer(0))) 
     read.table(inFile$datapath, head = F) 
     }) 

    # Trying to generate the check boxes 
    output$ui <- renderUI(checkBoxGroup('test', 'checkboxes', unique(test_data()$V1))) 

    output$plot1 <- renderPlot({ 
     ggplot(test_data(), aes(V2, V3)) + geom_point(aes(colour=V1)) 
    }) 
} 
Verwandte Themen