Есть ли функция R для запуска фрагмента кода несколько раз с интервалом в 3 секунды - PullRequest
0 голосов
/ 09 марта 2020

У меня есть фрагмент кода для получения данных из таблицы базы данных MYSQL. Я хотел бы продолжать обновлять фрейм данных каждые 3 секунды.

library(RMySQL)
library(dbConnect)
library(tictoc)

mydb = dbConnect(MySQL(), user='root', password='password', dbname='test_data', host='localhost')

dbListTables(mydb)

rs = dbSendQuery(mydb, "select * from rawdata")

data = fetch(rs)

View(data)

Существует ли функция R, например "ReactiveFileReader", для работы с ядром базы данных? Или, пожалуйста, помогите с фрагментом кода, чтобы запускать этот код несколько раз каждые 3 секунды. Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Я адаптирую пример из shiny::reactiveTimer. Протестировано на моей базе данных / экземпляре (не RMySQL, но достаточно близко).

library(DBI)
library(shiny)

ui <- fluidPage(
  tableOutput("mytbl")
)

server <- function(input, output) {
  # Anything that calls autoInvalidate will automatically invalidate
  # every 2 seconds.
  autoInvalidate <- reactiveTimer(3000)

  mydb = dbConnect(RMySQL::MySQL(), user='root', password='password', dbname='test_data', host='localhost')

  mydat <- eventReactive(autoInvalidate(), {
    DBI::dbGetQuery(mydb, "select * from rawdata")
  })

  output$mytbl <- renderTable(mydat())
}
0 голосов
/ 09 марта 2020

Одна вещь, которую вы можете сделать, это иметь функцию, которая будет запускаться каждые n раз с задержкой, но проблема в том, что данные будут сохраняться для каждой репликации, поэтому они могут очень скоро стать очень большими:

f <- function(){
    Sys.sleep(3)#delay time here
    mydb = dbConnect(MySQL(), user='root', password='password', dbname='test_data', host='localhost')
    dbListTables(mydb)
    rs = dbSendQuery(mydb, "select * from rawdata")
    fetch(rs)
}

# use replicate to run the function n times with delay time
data <- replicate(10, f())

мы получим данные как вектор со всеми отложенными запросами или матрицу векторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...