【问题标题】:communication between R shiny modules deployment problemR闪亮模块部署问题之间的通信
【发布时间】:2021-11-19 02:49:42
【问题描述】:

我对 R 闪亮模块之间的通信有疑问。我用 golem 包开发了一个有两个模块的应用程序:数据和分析https://xuemaozhang.shinyapps.io/reactivedata/ 为了共享一个数据集,我在 app_server.R 中使用了 reactiveValues, values = reactiveValues(data_imported=NULL)。

在我将应用程序部署到shinyapps.io 后,我发现它不允许多个用户:当一个用户更改数据时,其他用户也会看到相同的更新数据。我是闪亮的应用程序开发的新手。如何解决问题?源码可见我的github站点:https://github.com/xuemaozhang/reactivedata

【问题讨论】:

  • 您是否尝试将values = reactiveValues(data_imported=NULL) 放入函数 app_server 中?我认为你在 global.R 中初始化它的事实使它在用户之间持久化。如果你在应用服务器中初始化它,每个用户应该是不同的
  • 如果“values = reactiveValues(data_imported=NULL)”在 app_server 函数中,应用程序将无法运行。当我把它放在 app_server 函数之外时,也会发生同样的事情。是否可以为每个用户创建一个临时数据文件夹?

标签: r shiny deployment


【解决方案1】:

我更改了mod_module1_data_servermod_module2_analysis_serverapp_server 函数以便在会话中处理数据,无需在服务器函数之外创建reactiveValues()

mod_module1_data_server <- function(id){
  moduleServer( id, function(input, output, session){
    # ns <- session$ns
    Data <- reactive({
      Data <- get(input$dataset)
      Data
    })
    output$datatable<-renderDataTable({ Data()  })
    return(reactive(Data()))
  })
}
mod_module2_analysis_server <- function(id, Data){
  moduleServer( id, function(input, output, session){
    ns <- session$ns

    observe({
      updateSelectizeInput(session, "numvar",
                           choices = names(Data()))
    })

    output$summary <- renderPrint({
      summary(Data()[, input$numvar])
    })

    output$histogram<- renderPlot({
      hist(Data()[, input$numvar])
    })
  })
}

这是你应该放在服务器上的:

server <- function( input, output, session ) {
  Data <- mod_module1_data_server("module1_data_ui_1")
  mod_module2_analysis_server("module2_analysis_ui_1", Data)
  
}

【讨论】:

  • 非常感谢!问题已经解决了!我会将原始文件保留在网络上,以便其他有相同问题的模块可以看到它。
  • 如果解决了,请将我的评论标记为正确答案,谢谢
猜你喜欢
  • 2021-08-14
  • 2017-09-05
  • 2016-07-25
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多