2017-02-08 6 views
1

Ich möchte einen dynamischen Vektor als Textausgabe in meiner Shiny App anzeigen können. Ich möchte auch HTML (fett, Schriftfarben usw.) verwenden, also verwende ich htmlOutput und renderUI anstelle von textOutput und renderText pro this suggestion. HierVerwenden von renderUI in Shiny zum Anzeigen von Vektoren

ist einige Beispiel-Code:

library(shiny) 

shinyApp(

    ui <- htmlOutput("example"), 

    server <- function(input, output, session){ 

    # vector (in the real app, this is not a static vector--it will be updated with other inputs) 
    states <- c("Alabama", "Alaska", "Arizona", "Arkansas") 

    # text output 
    output$example <- renderUI({ 

     x <- paste0("<strong>Here are your states</strong>: ", states) 
     HTML(x) 

    }) #END RENDERUI 
    } #END SERVER 
) #END SHINYAPP 

Das Ergebnis dieses Codes ist:

Hier sind Ihre Zustände: Alabama Hier sind Ihre Staaten: Alaska Hier sind Ihre Staaten: Arizona Hier sind Ihre Staaten: Arkansas

Was ich will, ist:

Hier Ihre Zustände sind: Alabama Alaska Arizona Arkansas

Ich habe mit einer Lösung unter Verwendung von bedingten Anweisungen kommen, aber es ist ziemlich klobig. Hier ist, was ich in renderUI für die oben gewünschten Ausgang setzen:

x <- paste0("<strong>Here are your states: </strong>", 
      if(!is.na(states[1])){states[1]}, 
      if(!is.na(states[2])){states[2]}, 
      if(!is.na(states[3])){states[3]}, 
      if(!is.na(states[4])){states[4]}) 
HTML(x) 

Auch die obige Lösung funktioniert, aber es ist ziemlich klobig und wird schrecklich ineffizient für größere Vektoren (mit, sagen wir mal, 10 + Elemente). Gibt es eine einfachere Möglichkeit, diese Vektoren anzuzeigen und dennoch HTML zu verwenden?

Antwort

1

Sie suchen nach paste(..., collapse = " ").

library(shiny) 

shinyApp(

    ui <- htmlOutput("example"), 

    server <- function(input, output, session){ 

    # vector (in the real app, this is not a static vector--it will be updated with other inputs) 
    states <- c("Alabama", "Alaska", "Arizona", "Arkansas") 

    # text output 
    output$example <- renderUI({ 

     x <- paste0("<strong>Here are your states</strong>: ", paste(states, collapse = " ")) 
     HTML(x) 

    }) #END RENDERUI 
    } #END SERVER 
) #END SHINYAPP 
+1

Ja, das macht den Trick! Es ist erstaunlich, wie viele einfache Dinge in der Mischung verloren gehen, wenn man sich selbst beibringt. Vielen Dank! – Lauren

Verwandte Themen