Обновление фрейма данных на блестящем сервере. R без перезапуска приложения

Любые идеи о том, как обновлять фрейм данных, который использует блестящий, без остановки и перезапуска приложения?

Я попытался поставить load(file = "my_data_frame.RData", envir = .GlobalEnv) внутри реактивной функции, но до сих пор не повезло. Кадр данных не обновляется до тех пор, пока приложение не будет остановлено.

Ответ 1

Если вы просто обновляете обычные переменные (в глобальной среде или иначе), Shiny не знает, как реагировать на них. Для хранения переменных вместо этого нужно использовать объект reactiveValues. Вы создаете один, используя reactiveValues(), и он работает так же, как среда или список - вы можете хранить в нем объекты по имени. Вы можете использовать синтаксис $foo или [['foo']] для доступа к значениям.

Как только реактивная функция считывает значение из объекта reactiveValues, если это значение будет перезаписано другим значением в будущем, тогда реактивная функция будет знать, что ее нужно повторно выполнить.

Вот пример (более сложный из-за того, что вы используете load вместо того, что возвращает одно значение, например read.table):

values <- reactiveValues()
updateData <- function() {
  vars <- load(file = "my_data_frame.RData", envir = .GlobalEnv)
  for (var in vars)
    values[[var]] <- get(var, .GlobalEnv)
}
updateData()  # also call updateData() whenever you want to reload the data

output$foo <- reactivePlot(function() {
  # Assuming the .RData file contains a variable named mydata
  plot(values$mydata)
}

Мы должны иметь лучшую документацию по этому поводу довольно скоро. Спасибо за опору с нами тем временем.