我认为您希望能够在没有用户输入的情况下更新绘图。假设我是对的,您可以使用 reactiveTimer 来异步更新它,例如这个示例,它向分布添加一个点,然后每半秒更新一次绘图。
library(shiny)
ui <- fluidPage(
sidebarLayout(position = "left",
sidebarPanel("Controls",
actionButton("gogobutt","Go"),
actionButton("stopbutt","Stop"),
actionButton("resetbutt","Reset")),
mainPanel("Plot",
plotOutput("histplot")
)
))
server <- function(input,output,session) {
rv <- reactiveValues(x=rnorm(1),run=F)
autoInvalidate <- reactiveTimer(intervalMs=500,session)
observe({
autoInvalidate()
isolate({ if (rv$run) { rv$x <- c(rv$x,rnorm(1)) } })
})
observeEvent(input$gogobutt, { isolate({ rv$run=T }) })
observeEvent(input$stopbutt, { isolate({ rv$run=F }) })
observeEvent(input$resetbutt,{ isolate({ rv$x=rnorm(1) }) })
output$histplot <- renderPlot({
htit <- sprintf("Hist of %d rnorms",length(rv$x))
hist(rv$x,col = "steelblue",main=htit,breaks=12)
})
}
shinyApp(ui, server)
产量: