簡體   English   中英

閃亮的reactivePoll 重用於多個數據庫表名

[英]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>)
    ....
    ....
}

注意:我知道我可以將checkFuncvalueFunc移出並使它們通用,但是,它仍然需要 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM