2016-08-09 153 views
1

Ich versuche, einige reaktive Radio-Buttons in Shiny zu erstellen, und stoße auf einige Probleme. Der folgende Code erstellt ein Beispiel für das, was ich sehe. Zum Beispiel gibt es drei Auswahlen für Zahlen - 1, 2 und 3. Jede von diesen hat ihre eigenen möglichen Buchstaben-Auswahlen - wenn 1 oder 3 ausgewählt sind, sind A oder B verfügbar, aber wenn 2 ausgewählt ist, A, B, oder C sind verfügbar.Keeping Shiny Reactive Radio Buttons Konstante

Das Problem liegt darin, dass ich möchte, dass der zweite Satz von Optionsfeldern nur Optionen anzeigt, die abhängig von der Nummerauswahl verfügbar sind. Die Buchstabenauswahl wird jedoch jedes Mal zurückgesetzt, wenn ich eine neue Nummer auswähle. Wenn ich also 2 und B gewählt habe und dann die Zahl auf 1 ändere, ändert sich automatisch die Buchstabenauswahl zu A. Ich möchte, dass die zweite Auswahl bleibt, wenn es eine Option ist, so dass, wenn ich 2 und B gewählt habe, Ich könnte dann die Nummer ändern, was immer ich möchte, und B würde ausgewählt bleiben. Aber wenn ich 2 und C gewählt hätte, dann änderte ich die Zahl auf 1, offensichtlich gibt es kein C unter 1, also müsste es auf einen Standard zurückgesetzt werden (A, höchstwahrscheinlich).

Wie gehe ich vor, um die Radiobuttons so einzurichten, dass sie sich so verhalten?

library('shiny') 
library('shinydashboard') 

# Input Data 
inputData <- data.frame(a = c(1, 1, 2, 2, 2, 3, 3), 
         b = c('A', 'B', 'A', 'B', 'C', 'A', 'B') 
) 

# Body ############################# 
body <- dashboardBody(

    radioButtons('selectA', 'Select Number', 
       choices = unique(inputData$a)), 

    uiOutput('selectB') 
) 

# UI ############################# 
ui <- dashboardPage(
    dashboardHeader(title = 'Test', titleWidth = 290), 
    dashboardSidebar(width = 290), 
    body 
) 

# Server ############################# 
server <- function(input, output){ 

    output$selectB <- renderUI({ 
    radioButtons('selectB', 'Select Letter', 
       choices = unique(inputData[inputData$a == input$selectA, ]$b), 
       inline = TRUE) 
    }) 
} 

shinyApp(ui, server) 

Antwort

1

Sie können, ob testen etwas auf dem ersten Satz von Radiobuttons ausgewählt ist und die ausgewählte Argument des zweiten Satzes von Radiobuttons entsprechend wählen, wie folgt aus:

output$selectB <- renderUI({ 
    if(is.null(input$selectB)){ 
     radioButtons('selectB', 'Select Letter', 
     choices = unique(inputData[inputData$a == input$selectA, ]$b), 
     inline = TRUE) 
    } 
    else{ 
     radioButtons('selectB', 'Select Letter', 
     choices = unique(inputData[inputData$a == input$selectA, ]$b), 
     inline = TRUE, selected = ifelse(input$selectB %in% 
     unique(inputData[inputData$a == input$selectA, ]$b), input$selectB, 'A')) 
    } 
    }) 
+0

Das kam ganz in der Nähe. Alles, was ich tun musste, war, Ihre ausgewählte Anweisung zu 'selected = ifelse (Eingabe $ selectB% in% unique (inputData [inputData $ a == Eingabe $ selectA,] $ b), Eingabe $ selectB, 'A'))' zu editieren . Das erlaubte den Wechsel zu einer Voreinstellung von A, wenn 2/C gewählt wurde, und ich kehrte zu 1 zurück. Ansonsten funktionierte das perfekt! Danke für die Hilfe. – Sam

+0

Kein Problem! Ich werde meine Antwort bearbeiten, um diese Änderung aufzunehmen. –