一个模块可以在 R shiny 中包含两个输出吗?

Can one module include two outputs in R shiny?

一个模块可以在 R shiny 中包含两个输出吗?

我从 App.R 文件中调用一个包含数据 table 和图表的模块。 然而,它并没有毫无错误地显示在 shiny web 上。

我想知道一个模块是否不能处理两个输出。我在一个模块中有两个输出的原因是图表基于数据集,用于生成数据 table。如果我为图表创建额外的模块,我将不得不进行另一个查询以再次从数据库中获取数据框。

我该怎么办?我应该只用另一个模块和另一个查询吗?

简短的回答是:是的,他们可以!

这是一个包含两个输出的模块示例:一个按钮和一个文本。

library(shiny)

myModuleServer <- function(input, output, session){
  ns <- session$ns
  output$out1 <- renderText({
      paste("Button has been pressed", input$btn, "times")
    })
  output$out2 <- renderUI({
    actionButton(ns("btn"), "btn_label")
  }) 
}

myModuleUI <- function(id){
  ns <- NS(id)
  fluidPage(
    textOutput(ns('out1')),
    uiOutput(ns('out2'))
  )
}

ui <- fluidPage(
  titlePanel("Module example"),
  myModuleUI('module_id')
)

server <- function(input, output, session){
  callModule(myModuleServer, 'module_id')
}

shinyApp(ui, server)

我猜你 运行 陷入了 命名空间 的复杂局面。当我开始使用模块时(很明显)以及当我开始使用 external librariesshinyBSshinyjs 等时,这种情况经常发生在我身上。对于某些功能 没有必要使用 ns 功能,对于某些功能来说

一个具体的例子是 shinyjs::disable 函数,我不得不用 shinyjs::disable('checkbox') 而不是 shinyjs::disable(ns('checkbox')) 来调用它。也就是说,因为 shinyjs 在其 内部例程 中使用了 session::ns。参见 here