闪亮:将输出字符串分成(可操作的)单个单词的提示

时间:2017-11-19 17:38:07

标签: r shiny

在Shiny App中,我使用以下代码输出渲染文本:

  output$prediction <- renderText({
    unlist(strsplit(unique(candidates()[,"word"])," "))
  })

然而,strsplit似乎无关紧要,因为输出是作为单个字符串传递的。

tags$div(
   htmlOutput("prediction", type="button", 
              container = tags$button, 
              class = "btn btn-info")
)

1]

生成的HTML代码

<div>
        <button class="shiny-html-output btn btn-info shiny-bound-output"
                id="prediction" type="button">
                important interesting boring of people
        </button>
</div>

期望输出:

2]

我需要能够为每个复合输出的单词应用按钮标记。或者,换句话说,生成的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次不同的调用。

1 个答案:

答案 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)