2016-10-06 1 views
3

Ich habe ein Problem mit der Kombination von "selectInput" und "updateSelectInput" in meiner Shiny-App (ich bin neu bei Shiny, aber ich kann nirgendwo eine Antwort auf diese Frage finden). Ich möchte das Etikett mit HTML-Tags wie im folgenden Beispiel formatieren (z. B. zwischen zwei Zeilen aufgeteilt, Schriftgröße ändern). Dies funktioniert gut für die "selectInput", aber die "updateSelectInput" kann nicht die gleiche Bezeichnung verdauen und es gibt "[object Object]". Es scheint mir, dass es nicht mit HTML-Tags umgehen kann. Gibt es dafür einen Workaround ??? Vielen Dank!updateSelectInput-Label akzeptiert keine HTML-Tags?

ui.R:

# Load libraries needed for app 
library(shiny) 
library(shinydashboard) 

# Define the overall UI with a dashboard page template 
shinyUI(
    dashboardPage(
     dashboardHeader(title = "dashboard header"), 
     dashboardSidebar( 
     #Create first dropdown box 
     selectInput("choice1", "First choice:",1:5,selected=NULL), 

     #Create second dropdown box 
     selectInput("choice2", p("Then, make your ", tags$br(), tags$small("second choice")), c("a","b","c","d","e")) 
    ), 
     dashboardBody() 
    ) 
) 

server.R:

# Load libraries needed for app 
library(shiny) 
library(shinydashboard) 

# Define server for the Shiny app 
shinyServer(function(input, output,session) { 
    # populate second dropdown box when a choice in first dropdown box is made 
    observe({ 
     updateSelectInput(session, "choice2", p("Then, make your ", tags$br(), tags$small("second choice")), c("a","b","c","d","e")) 
    }) 
}) 

Antwort

1

Es ist nicht klar, in Ihrer Beschreibung/Code, was Sie erreichen wollen. Abgesehen davon, dass Sie die Bezeichnung in updateSelectInput ändern, müssen Sie die Beschriftung im Befehl update nicht wiederholen. Auch gibt es keine Eingabe in Ihre Beobachtung (ich werde den Code ändern, um auf die Eingabe $ choice1 reaktiv zu sein, aber Sie müssen Code hinzufügen, um die Auswahl in choice2 zu aktualisieren.

Sie können auch renderUI verwenden/uiOutput Kontrollen in dem Server zu aktualisieren, dann. Sie Probleme mit dem Etikett vermeiden

# Load libraries needed for app 
library(shiny) 
library(shinydashboard) 

# Define server for the Shiny app 
server <- shinyServer(function(input, output,session) { 
    # populate second dropdown box when a choice in first dropdown box is made 
    observeEvent(input$choice1 ,{ 
     updateSelectInput(session = session, 
         inputId = "choice2", 
         # label = p("Then, make your ", tags$br(), tags$small("second choice")), 
         choices = c("a","b","c","d","e")) 
    }) 
}) 


# Define the overall UI with a dashboard page template 
ui <- shinyUI(
    dashboardPage(
     dashboardHeader(title = "dashboard header"), 
     dashboardSidebar( 
     #Create first dropdown box 
     selectInput(inputId = "choice1", 
        label = "First choice:", 
        choices = 1:5, 
        selected=NULL), 

     #Create second dropdown box 
     selectInput(inputId = "choice2", 
        label = p("Then, make your ", tags$br(), tags$small("second choice")), 
        choices = c("a","b","c","d","e")) 
    ), 
     dashboardBody() 
    ) 
) 

shinyApp(ui, server) 
+0

Hallo Ron, Vielen dank für Ihre schnelle Antwort. Erstens, mein Problem löste das Etikett in updateSelectInput Auskommen !!! Obwohl Ich verstehe immer noch nicht, warum es das selbe nicht akzeptieren würde, das selectInput an erster Stelle akzeptiert - irgendwelche Ideen.Ich habe nichts in die Beobachtung aufgenommen, weil es außer dem Punkt war, aber ich nehme an, dass ich das vollständig hätte entfernen können dann danke nochmal! – humuskopf

+0

updateSelectInput ist schwierig. Sie können in selectInput auch label = NULL festlegen und die Beschriftung als HTML-Absatz oberhalb des Steuerelements in der Benutzeroberfläche oder im Server mithilfe von renderUI/uiOutput hinzufügen. Normalerweise mache ich das, da es viel flexibler ist. –

+0

OK, danke Ron! Zumindest bin ich mir dessen jetzt bewusst! – humuskopf

Verwandte Themen