2017-12-29 8 views
0

Ich habe folgendes glänzend Skriptmehrere Grafiken mit Knopf im glänzenden

library(shiny) 

ui <- fluidPage(
    actionButton("go", "Go"), 
    #This should trigger a default 100 hist 
    actionButton("go", "Go"), 
    numericInput("n", "n", 50), 
    plotOutput("plot") 
) 

server <- function(input, output) { 

    randomVals <- eventReactive(input$go, { 
    runif(input$n) 
    }) 

    randomVals2 <- eventReactive(input$go, { 
    runif(n = 100) 
    }) 

    output$plot <- renderPlot({ 
    hist(randomVals()) 
    }) 
    output$plot2 <- renderPlot({ 
    hist(randomVals2()) 
    }) 
} 

shinyApp(ui, server) 

Dies bietet mir mit einem Knopf ich drücken kann, um ein Histogramm zu erhalten. Es funktioniert gut. Ich möchte jedoch auch einen weiteren Knopf daneben einfügen, der ein Histogramm mit dem Standard n = 100 ergibt (nur für Lernzwecke).

Die zweite Schaltfläche scheint jedoch nicht zu funktionieren.

Irgendwelche Gedanken darüber, was geändert werden sollte, um es auszulösen?

Antwort

0

Sie kippt haben mehrere Tasten mit der gleichen ID bitte Taste Namen ändern

actionButton("go", "Go"), 
    #This should trigger a default 100 hist 
    actionButton("go1", "Go"), 
1

@PorkChop hat darauf richtig einen Fehler im Code aus, die die wiederholten IDs beiden Tasten sind. Außerdem haben Sie nicht plot2 in Ihrer UI-Funktion definiert.

Allerdings möchte ich kommentieren, dass die definierten Funktionen ein wenig redundant ist. Im Prinzip sollten beide Schaltflächen die gleichen Funktionalitäten aufweisen (Zufallsdaten erzeugen und ihr Histogramm aufzeichnen), mit unterschiedlichen Größenparametern.

Der sauberste Weg wäre eine Funktion werden definiert, die die volle Funktionalität macht erforderlich, und es mit den spezifischen Parametern mit jeder Taste aufrufen:

library(shiny) 

ui <- fluidPage(
    actionButton("go_hist", "Go"), 
    actionButton("go_hist_100", "Go with 100"), #This should trigger a default 100 hist 
    numericInput("n", "n", 50), 
    plotOutput("plot") 
) 

server <- function(input, output) { 
    plotHist = function(size){ 
    randomData = runif(size) 
    output$plot = renderPlot(hist(randomData, main = paste("n =", size))) 
    } 
    observeEvent(input$go_hist, plotHist(input$n)) 
    observeEvent(input$go_hist_100, plotHist(100)) 
} 

shinyApp(ui, server) 

Mit einer solchen Funktionalisierung wird Ihr Code leichter zu lesen, zu debuggen und pflegen.

Verwandte Themen