2016-09-27 4 views
1

ich arbeite an einer glänzenden App. Was ich versuche zu tun: Ich möchte die kronologische Reihenfolge der Aktivierung von zwei verschiedenen Aktionsknöpfen in einen Vektor "aufzeichnen".R Shiny: Definition eines Vektors mit zwei Aktionstasten

Wenn zum Beispiel Taste1 (rot) zweimal gedrückt wird, dann Taste2 (schwarz) einmal gedrückt und dann Taste1 (rot) erneut gedrückt => Der Vektor sollte aussehen: col = c ("rot", " rot "," schwarz "," rot ").

, was ich bisher getan haben, ist dies (in vielen verschiedenen Variationen):

col <- NULL observeEvent(input$rot, {col<-c(col,"red")}) observeEvent(input$schwarz, {col<-c(col,"black")}

Eingang $ rot und Eingang $ schwarz sind die Namen der Aktionstasten. Daher nahm ich an, dass die jeweilige Farbe bei jedem Drücken einer Taste zum Vektor hinzugefügt werden sollte. ABER: Nichts passiert ... Natürlich füge ich den Vektor col in die App ein, das ist definitiv nicht das Problem.

Es wäre toll, wenn jemand eine Idee hat. Dank

Antwort

2

Sie können reactiveValues verwenden, um einen Vektor col auf der Serverseite zu speichern:

geschichte <- reactiveValues(col = NULL) 

Sie können es dann Zugriff innerhalb eines reaktiven Kontext über geschichte$col oder über geschichte[["col"]] und einfach überschreiben, als ob geschichte regelmäßig war Liste:

observeEvent(input$rot, { 
    geschichte$col <- c(geschichte$col, "red") 
    }) 

Voll Beispiel:

library(shiny) 
rm(ui) ; rm(server) 

ui <- fluidPage(
    actionButton("rot", "Red"), 
    actionButton("schwarz", "Black"), 
    br(), 
    textOutput("col") 
) 

server <- function(input, output) { 

    geschichte <- reactiveValues(col = NULL) 

    observeEvent(input$rot, { 
    geschichte$col <- c(geschichte$col, "red") 
    }) 

    observeEvent(input$schwarz, { 
    geschichte$col <- c(geschichte$col, "black") 
    }) 

    output$col <- renderText({ 
    geschichte$col 
    }) 
} 

shinyApp(ui, server) 

enter image description here

+1

Perfect! Ich danke dir sehr. Ich versuchte es auch mit reaktiven, aber ich hatte offensichtlich keine Ahnung, verbrachte Stunden. Vielen Dank –