Почему мои реактивные значения не инициализируются в функции сервера, уникальной для каждого сеанса? - PullRequest
0 голосов
/ 06 февраля 2019

Я развертываю свое приложение на 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 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно сделать две вещи

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)

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