我希望能够在我的Shiny应用程序中将动态矢量显示为文本输出。我还想使用HTML(粗体,字体颜色等),因此我使用htmlOutput
和renderUI
代替textOutput
和renderText
每this 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?
答案 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