【发布时间】:2015-10-09 20:16:00
【问题描述】:
我查看了 this 和 this 线程以及其他一些线程,但无法找出我的解决方案。
我已经使用 R 和 Shiny 构建了一个仪表板,并且说仪表板使用 RPostgreSQL 包从 Postgres 数据库中提取数据。目前,所有数据提取和分析的代码都在shinyServer函数之外完成,只有显示部分(output和render函数)在shinyServer部分。我想对其进行设置,以便定期刷新仪表板数据并更新图表。我已经研究了reactivePoll 和invalidateLater 并理解了它们,但不能完全弄清楚如何在我的代码中实现它。
这是一个简化的示例server.R 代码:
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host='host', port='12345', dbname='mydb',
user='me', password='mypass')
myQuery <- "select * from table"
myTable <- dbGetQuery(con, myQuery)
foo <- nrow(myTable)
bar <- foo * 2
shinyServer(
function(input, output, session) {
output$foo <- renderText(foo)
output$bar <- renderText(bar)
session$onSessionEnded(function(){
dbDisconnect(con)
dbDisconnect(con2)
dbUnloadDriver(drv)
})
}
)
现在,如果我希望 foo 定期更新,这需要我刷新我也有的 dbGetQuery 命令,但我不知道如何让它们一起工作。我是否需要重新格式化并将所有内容放入 shinyServer 函数中?我有大约 250 行代码,将它们全部放在那里感觉不对,并且仅仅将数据提取部分放在那里可能会打乱事物的顺序。任何帮助表示赞赏。
【问题讨论】:
-
查看
invalidateLater,您将其与时间参数一起使用。我们使用它来自动更新地块。 -
@Thomas K 的解决方案对您的问题有效吗?我有同样的问题,并且会很高兴有一些工作代码示例。提前致谢!
-
@Blind0ne 这个问题是两年前提出的,老实说,我真的不记得任何细节,但我将其标记为正确,所以它必须至少部分有效。
标签: r postgresql shiny reactive-programming rpostgresql