一个模块可以包含R闪亮的两个输出吗?

时间:2017-06-29 20:18:30

标签: r module shiny output render

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

从App.R文件中,我正在调用包含数据表和图表的模块。 但是,它没有在没有任何错误的情况下在闪亮的网页上显示。

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

我该怎么办?我应该只有另一个模块与另一个查询?

1 个答案:

答案 0 :(得分:0)

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

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

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)

我的猜测是你遇到了名称空间的并发症。当我开始使用模块时(很明显),当我开始使用外部库,如shinyBSshinyjs等时,这种情况发生在我身上。对于某些功能它没有必要使用ns函数,对某些人而言。

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