2017-02-08 35 views
1

Я хочу иметь возможность отображать динамический вектор в виде текстового вывода в моем приложении Shiny. Я также хочу использовать HTML (жирный шрифт, цвет шрифта и т. Д.), Поэтому я использую htmlOutput и renderUI вместо textOutput и renderText за this suggestion.Использование renderUI в Shiny для отображения векторов

Вот несколько примеров кода:

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 

Результат этого кода:

Вот ваши штаты: Alabama Вот ваши штаты: Аляска Вот ваши штаты: Arizona Ваши контактные данные: Arkansas

Что я хочу:

Вот ваши штаты: Алабама Аляска Аризона Арканзас

я пришел к решению, используя условные выражения, но это довольно неуклюжим. Вот что я положил в renderUI для выше требуемого выхода:

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) 

Опять же, выше решение работает, но это довольно неуклюжее и будет очень неэффективны для больших векторов (с, скажем, 10+ элементы). Есть ли более простой способ отображения этих векторов, хотя он все еще может использовать HTML?

ответ

1

Вы ищете 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

Да, это делает трюк! Удивительно, как многие простые вещи теряются в миксе, когда вы самоучка. Благодаря! – Lauren