在Shiny App中,我使用以下代码输出渲染文本:
output$prediction <- renderText({
unlist(strsplit(unique(candidates()[,"word"])," "))
})
然而,strsplit
似乎无关紧要,因为输出是作为单个字符串传递的。
tags$div(
htmlOutput("prediction", type="button",
container = tags$button,
class = "btn btn-info")
)
生成的HTML代码:
<div>
<button class="shiny-html-output btn btn-info shiny-bound-output"
id="prediction" type="button">
important interesting boring of people
</button>
</div>
期望输出:
我需要能够为每个复合输出的单词应用按钮标记。或者,换句话说,生成的HTML应为:
<div>
<button class="shiny-html-output btn btn-info shiny-bound-output" id="prediction1" type="button">important</button>
<button class="shiny-html-output btn btn-info shiny-bound-output" id="prediction2" type="button">interesting</button>
<button class="shiny-html-output btn btn-info shiny-bound-output" id="prediction3" type="button">boring</button>
<button class="shiny-html-output btn btn-info shiny-bound-output" id="prediction4" type="button">of</button>
<button class="shiny-html-output btn btn-info shiny-bound-output" id="prediction5" type="button">people</button>
</div>
请注意,server.R可以提供1到25之间未定义的单词数,因此我不能只对server.R文件进行5次不同的调用。
答案 0 :(得分:2)
听起来你真正想要的是如何构建动态UI。我的建议是利用功能。编写一个生成UI最基本单元的函数,然后组合它们以构建更复杂的UI。
在这种情况下,构建块将是这些单词按钮,它们实际上只是具有按钮样式类的div(至少在您的示例中):
wordButton <- function(word) {
div(word, class = "btn btn-info")
}
从那里,您可以使用for循环或apply
函数。这是一个完整的例子:
library(shiny)
wordButton <- function(word) {
div(word, class = "btn btn-info")
}
ui <- fluidPage(
uiOutput("words")
)
server <- function(input, output) {
words <- reactive({
c("important", "interesting", "boring", "of", "people")
})
output$words <- renderUI({
lapply(words(), wordButton)
})
}
shinyApp(ui, server)