Ответ 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)
}
Мы должны иметь лучшую документацию по этому поводу довольно скоро. Спасибо за опору с нами тем временем.