在Shiny中使用renderUI来显示向量

时间:2017-02-08 17:05:04

标签: html r vector shiny render

我希望能够在我的Shiny应用程序中将动态矢量显示为文本输出。我还想使用HTML(粗体,字体颜色等),因此我使用htmlOutputrenderUI代替textOutputrenderTextthis suggestion

以下是一些示例代码:

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

此代码的结果是:

  

以下是您的州:阿拉巴马州以下是您的州:阿拉斯加州此处   您的州:亚利桑那州以下是您的州:阿肯色州

我想要的是:

  

以下是您的州:阿拉巴马州阿拉斯加州亚利桑那州阿肯色州

我已经提出了使用条件语句的解决方案,但它非常笨重。以下是我在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 个答案:

答案 0 :(得分:2)

您正在寻找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