Почему мои реактивные значения не инициализируются в функции сервера, уникальной для каждого сеанса?
Я развертываю свое приложение на shinyapps и замечаю странное поведение, когда у меня открыто несколько окон. Я обработал таблицу данных, и когда я обновляю фильтры в окне, моя таблица обновляется только в последнем открывшемся окне.
Я переместил свои реактивные значения для загрузки в функцию сервера после прочтения обзорной документации.
app.R
source("helpers/load_data.R")
server <- function(input, output, session) {
source("helpers/load_session_data.R")
output$risk_table <- renderDataTable({
DT::datatable(riskData$data
rownames = FALSE)
})
observeEvent(input$get_filtered_data, {
# UpdateTable function takes my table_csv and filters by the date, and updates the riskData reactive value
UpdateTable(table, input$date)
}
UpdateTable <- function(table, date) {
#... filter stuff
riskData$data <- filtered_table
}
}
load_session_data.R
#table is a data.frame loaded globally outside of the ui and server functions.
riskData <- reactiveValues(data = table_csv)
Я думал, что загрузка моих реактивных значений в функции сервера означает, что у каждого сеанса будут свои реактивные значения? Я хочу иметь возможность фильтровать таблицу независимо друг от друга в разных сессиях.
1 ответ
Вам нужно сделать две вещи
1 комплект local=T
во время исходного звонка
source("helpers/load_data.R", local=T)
source("helpers/load_session_data.R", local=T)
"Если вы используете значение по умолчанию local = FALSE, тогда файл будет получен из глобальной среды".
2) Поместите исходные вызовы под функцию сервера, в противном случае даже при включении local=T
вызов будет разделен между сеансами
server <- function(input, output, session) {
source("helpers/load_data.R", local=T)
source("helpers/load_session_data.R", local=
...
}
Действительно хороший пример в блестящей документации.. (Код можно найти здесь)
# Objects in this file are shared across all sessions in the same R # process source('all_sessions.R', local = TRUE) server <- function(input, output, session) { # Objects in this file are defined in each session source('each_session.R', local = TRUE) output$text <- renderText({ # Objects in this file are defined each time this function is called source('each_call.R', local = TRUE) # ... }) }