如何逐个显示字符向量的元素

时间:2016-11-24 04:42:10

标签: r shiny

我有一个角色向量corpus。当我点击Next按钮时,我试图逐个显示向量的每个成员。 如何使用current按钮增加Next变量?
到目前为止,我有以下代码:

#ui.R
library(shiny)
shinyUI(fluidPage(
  titlePanel("Display character vector one by one"),
  sidebarLayout(sidebarPanel(actionButton("Next", "Next Sentence")),
  mainPanel( htmlOutput("content"))
)))

#server.R
shinyServer(function(input, output) {
  corpus <- c("Sample sentence one", "Second sentence", "Third sentence")
  current <- 1 
  observeEvent(input$Next,{
    if(current <= length(corpus))
    output$content <- renderText(corpus[current])
  })
})

还请建议是否有更好的方法来实现此功能

2 个答案:

答案 0 :(得分:2)

问题是:

server.R中,您将变量current设为本地变量,因此每次点击按钮 下一句 时,它都会保持不变{ {1}}因此,它将始终呈现列表中的第一个元素,即1

解决方案:

创建全局变量,每次单击按钮后增加Sample sentence one。在 RShiny 中,使用1修改全局变量而不是<<-。另请查看Scoping rules for Shiny apps

所以检查:

<-

答案 1 :(得分:1)

您也可以尝试这一点,将当前索引存储为反应值并循环显示句子,使用模运算:

#ui.R
library(shiny)
ui <- shinyUI(fluidPage(
  titlePanel("Display character vector one by one"),
  sidebarLayout(sidebarPanel(actionButton("Next", "Next Sentence")),
                mainPanel( htmlOutput("content"))
  )))

#server.R
server <- shinyServer(function(input, output) {
  values <- reactiveValues()
  values$current <- 0
  corpus <- c("Sample sentence one", "Second sentence", "Third sentence")
  observeEvent(input$Next,{
    output$content <- renderText(corpus[values$current])
    values$current <- values$current %% length(corpus) + 1
  })
})
shinyApp(ui = ui, server = server)