使用invalidateLater()自动更新表格或绘图
我想了解为什么在使用invalidateLater()自动更新表格或绘图,r,plot,shiny,auto-update,R,Plot,Shiny,Auto Update,我想了解为什么在observeEvent()内部使用invalidateLater()时,下表不会自动更新。我准备了以下程序来说明我的问题,“mytable2”使用reactiveTimer()并产生所需的输出,而“mytable”使用invalidaterater()并且除非我单击“更新”按钮,否则不会自动更新。为什么? library(shiny) ui <- fluidPage( sidebarLayout( sidebarPanel( actionBut
observeEvent()
内部使用invalidateLater()
时,下表不会自动更新。我准备了以下程序来说明我的问题,“mytable2”使用reactiveTimer()
并产生所需的输出,而“mytable”使用invalidaterater()
并且除非我单击“更新”按钮,否则不会自动更新。为什么?
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("update", "Update")
),
mainPanel(
column(6, tableOutput('mytable')),
column(6, tableOutput('mytable2'))
)
)
)
server <- function(input, output) {
values <- reactiveValues(df = RenderMyTable())
observeEvent(invalidateLater(1000), {
values$df <- RenderMyTable() # This does not update after 1 sec
})
observeEvent(input$update, {
values$df <- RenderMyTable() # This does update upon clicking
})
output$mytable <- renderTable(values$df) # Depends on reactiveValues
autoInvalidate <- reactiveTimer(1000)
output$mytable2 <- renderTable({
autoInvalidate()
RenderMyTable() # >This does update after 1 sec
})
}
time1 <- Sys.time() # Start time
df <- data.frame(a = 1:1000) # Some data
RenderMyTable <- function(){
# Seconds since start time
time2 <- as.integer(difftime(Sys.time(), time1, units="secs"))
df.now <- df[1:time2,] # Updates each second
df.now
}
shinyApp(ui = ui, server = server)
库(闪亮)
ui首先,我想说的是,我从这段代码中学到了一些东西,这是一种自动化绘图更改的非常简洁的方法,因此,谢谢您,我将在将来使用它
对于您的问题,我已经研究了invalidaterater
,它使用了反应和观察功能,正如您所做的那样。只需从observeEvent
更改为observeEvent
,并将invalidateLater
函数移动到代码的主块中,而不是将其作为参数传递,即可在第一个表输出中修复此问题
以下是我的想法来源的一个工作版本的链接:
对于您的后续问题,我们可以通过与之前完全相同的流程来完成:
output$autoupdate_plot <- renderPlot({
invalidateLater(2000)
hist(rnorm(isolate(RenderMyTable())))
})
首先,我想说的是,我从这段代码中学到了一些东西,这是一种非常巧妙的自动化绘图更改的方法,因此,谢谢您,我将在将来使用它
对于您的问题,我已经研究了invalidaterater
,它使用了反应和观察功能,正如您所做的那样。只需从observeEvent
更改为observeEvent
,并将invalidateLater
函数移动到代码的主块中,而不是将其作为参数传递,即可在第一个表输出中修复此问题
以下是我的想法来源的一个工作版本的链接:
对于您的后续问题,我们可以通过与之前完全相同的流程来完成:
output$autoupdate_plot <- renderPlot({
invalidateLater(2000)
hist(rnorm(isolate(RenderMyTable())))
})
你为什么不把RenderMyTable()
作为一个反应函数呢?为什么不把RenderMyTable()作为一个反应函数呢?