0

我正在将我的应用程序部署到 shinyapps 并且当我打开多个窗口时我注意到一些奇怪的行为。我已经渲染了一个数据表,当我更新一个窗口上的过滤器时,我的表只在最后一个打开的窗口上更新。

阅读范围文档后,我已将我的反应值移动到服务器函数中。

应用程序.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) 

我认为在服务器函数中加载我的反应值意味着每个会话都有自己的反应值?我希望能够在不同的会话中独立过滤表。

4

1 回答 1

0

你需要做两件事

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)

    # ...
  })
}
于 2019-02-06T18:14:54.910 回答