首页 > 解决方案 > 有没有办法在 Shiny 中通过单击单个动作按钮来触发连续的定时事件?

问题描述

我正在构建一个旨在帮助学生理解采样的应用程序。该应用程序允许学生选择一个样本大小,然后在给定一些概率的情况下查看他们得到了多少个 1。当样本量较小(即 1)时,经常会出现同一值(0 或 1)连续多次采样的情况。但是,如果学生单击操作按钮重新采样并获得与上次随机抽签相同的值,我将无法在视觉上清楚地表明该值已更新(即,发生了某些事情,即使它给出了结果和之前一样)。理想情况下,我希望单击操作按钮以使主面板上的此字段变为空白几分之一秒,然后显示新值。

我曾尝试使用 Sys.sleep 让系统在继续之前休眠一秒钟,但这不起作用。在使用 Sys.sleep 之前,我可以通过尝试在同一输出字段中打印其他内容来使其(某种程度上)工作,但我觉得必须有一种更简单的方法。

ui <- fluidPage(
    titlePanel("Example"),
    sidebarLayout(
        sidebarPanel(
            actionButton("run", "Pick a number (0 or 1)")),
        mainPanel(
            h4("Your Number!"),
            textOutput("result")
        )
    )
)
server <- function(input, output,session) {
        observeEvent(input$run, {
        x <- sample(c(0,1),size=1,prob=c(.5,.5),replace=T)
        ###Including these commented lines achieves what I want, 
        ###but doesn't seem very elegant:
        # output$result <- renderText({
        #     print("something")
        # })
        Sys.sleep(1)
        output$result <- renderText({
            paste("You got the number ",x)
        })
    })
}
shinyApp(ui, server)

标签: rshiny

解决方案


推荐阅读