блестящее реактивное повторное использование пакета для нескольких имен таблиц базы данных - PullRequest
0 голосов
/ 04 октября 2018

У меня есть панель инструментов, которая опирается на 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+ responsetivePoll () определения, которые вызывают эти две другие функции.Вот чего я стараюсь избегать.

1 Ответ

0 голосов
/ 04 октября 2018

Я нашел более общий ответ на этот вопрос: Создайте реактивную функцию вне блестящего приложения

Он цитирует: 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...