R Shiny 应用程序中的“下一步”按钮

2024-01-04

我正在尝试使用 Shiny 构建一个逐步的应用程序。我的目标是创建一个由数据库中编写的一堆问题组成的考试。我需要的是一个“下一步”按钮,当您单击另一个问题时会显示该按钮。

我一直在尝试使用“操作按钮”,但它只是第一次起作用,也就是说,第一次单击它时会显示一个问题,但一旦第一次单击它就变得不可单击(它不起作用如我所愿的“下一步按钮”)。

这是代码:

服务器.R:

library(xlsx)
data<-read.xlsx("data/base.xlsx",sheetName="Full1")

shinyServer(function(input, output) {

  data[,2]<-as.character(data[,2])

  question<-data[2,2]

  ntext <- eventReactive(input$goButton, {
    question
  })

  output$nText <- renderText({
     ntext()
  })  
})

ui.R:

shinyUI(pageWithSidebar(
  headerPanel("Exam"),
  sidebarPanel(
    actionButton("goButton", "Next"),
    p("Next Question")
  ),
  mainPanel(
    verbatimTextOutput("nText")
  )
))

太感谢了。


你可以做这样的事情。请注意代码中的注释

rm(list = ls())
library(shiny)
questions <- c("What is your name?","Can you code in R?","Do you find coding fun?","Last Question:How old are you?")

ui <- pageWithSidebar(
  headerPanel("Exam"),
  sidebarPanel(actionButton("goButton", "Next"),p("Next Question")),
  mainPanel(verbatimTextOutput("nText")))

server <- function(input, output,session) {

  # Inititating reactive values, these will `reset` for each session
  # These are just for counting purposes so we can step through the questions
  values <- reactiveValues()
  values$count <- 1

  # Reactive expression will only be executed when the button is clicked
  ntext <- eventReactive(input$goButton,{

    # Check if the counter `values$count` are not equal to the length of your questions
    # if not then increment quesions by 1 and return that question
    # Note that initially the button hasn't been pressed yet so the `ntext()` will not be executed
    if(values$count != length(questions)){
      values$count <- values$count + 1
      return(questions[values$count])
    }
    else{
      # otherwise just return the last quesion
      return(questions[length(questions)])
    }
  })

  output$nText <- renderText({
    # The `if` statement below is to test if the botton has been clicked or not for the first time,
    # recall that the button works as a counter, everytime it is clicked it gets incremented by 1
    # The initial value is set to 0 so we just going to return the first question if it hasnt been clicked
    if(input$goButton == 0){
      return(questions[1])
    }
    ntext()
  })  
}
shinyApp(ui = ui, server = server)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R Shiny 应用程序中的“下一步”按钮 的相关文章

随机推荐