[英]shiny reactivePoll re-use for multiple database table names
我有一個依賴 25 多個數據庫表的儀表板。 我想定期刷新這些數據。 閃亮的reactivePoll
檢查每個表上的行數,然后在行數增加時讀取表,這對我來說是正確的。
但是,我不想編寫 25 個以上的reactivePoll
方法,每個表一個。 相反,我想定義一個“通用”並通過簡單地提供數據庫表名來重新使用它。
我找不到辦法做到這一點。 有任何想法嗎? 從概念上講,這是我想要的:
pollData <- reactivePoll(60000, session,
checkFunc = function() {
dbconn <- dbConnect(MySQL(), group = 'mysql')
query <- dbSendQuery(dbconn,
'
SELECT
MAX(timeCreated) as lastCreated
FROM
<table name passed as argument>;
')
lastFeedback <- dbFetch(query, -1)
dbClearResult(query)
dbDisconnect(dbconn)
lastFeedback$lastCreated
},
# This function returns the content of the logfile
valueFunc = function() {
dbconn <- dbConnect(MySQL(), group = 'mysql')
query <- dbSendQuery(dbconn,
'
SELECT
*
FROM
<table name passed as argument>
')
data <- dbFetch(query, -1)
dbClearResult(query)
dbDisconnect(dbconn)
data
}
)
server <- function(input, output, session) {
table1Data <- pollData(<table1 name>)
table2Data <- pollData(<table2 name>)
....
....
}
注意:我知道我可以將checkFunc
和valueFunc
移出並使它們通用,但是,它仍然需要 25 個以上的checkFunc
() 定義來調用其他兩個函數。 這就是我試圖避免的。
我在這個問題上找到了一個更一般的答案: 在閃亮的應用程序之外創建一個反應函數
它引用了: https : //shiny.rstudio.com/articles/modules.html我相信您正在嘗試構建一個閃亮的模塊。 在您的情況下,它可能如下所示(一個調用反應函數的函數):
my.reactivePoll <- function(session, table_name, timeout = 60000)
{
my.dataframe <- reactivePoll(timeout, session,
checkFunc = function() {
lastFeedback <- "testValue"
# checking logic here
lastFeedback
},
# This function returns the content of the logfile
valueFunc = function() {
data <- paste0("New value", table_name)
# value logic here
data
})
my.dataframe
}
然后在服務器函數中調用,提供table_name
server <- function(input, output, session) {
table1Data <- my.reactivePoll(session, "table1")
table2Data <- my.reactivePoll(session, "table2")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.