我有一个运行模拟的闪亮应用程序。目标是以绘图的形式向用户显示计算步骤。
如何让shiny强制更新绘图?
最小工作示例(MWE)如下所示:
library(shiny)
server <- function(input, output, session) {
# base plot as a placeholder
output$myplot <- renderPlot(plot(1:1, main = "Placeholder"))
# wait until the button is triggered
observeEvent(input$run, {
print("Do some calculations in 3 steps")
for (i in seq_len(3)) {
print("Do some calculations")
# ...
x <- seq_len(i * 100)
y <- (x + 1)^2 - 1 # this will do for now
print("Plot the data ")
# ISSUE HERE!
# this should render the current step of the simulation, instead it
# renders only after the whole code is run (i.e., after step 3)
output$myplot <- renderPlot(plot(x, y, main = sprintf("Round %i", i), type = "l"))
print("Wait for 1 second for the user to appreciate the plot...")
Sys.sleep(1)
}
})
}
ui <- fluidPage(
actionButton("run", "START"),
plotOutput("myplot")
)
shinyApp(ui = ui, server = server)
问题在于,shiny运行代码并在模拟结束时生成一个图表,但我想在每个模拟步骤(至少显示一秒钟)获得一个图表。
非常感谢您的任何帮助/提示。
附录
我看了这个帖子,但用一个图表/
renderPlot
替换文本并不会产生正确的结果。
sliderInput("format", "自定义格式:", min = 0, max = 3, value = 0, step = 1, animate = TRUE)
。 - CCurtis