一个模块可以在 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 libraries 像 shinyBS
、shinyjs
等时,这种情况经常发生在我身上。对于某些功能 没有必要使用 ns
功能,对于某些功能来说
一个具体的例子是 shinyjs::disable
函数,我不得不用 shinyjs::disable('checkbox')
而不是 shinyjs::disable(ns('checkbox'))
来调用它。也就是说,因为 shinyjs
在其 内部例程 中使用了 session::ns
。参见 here
一个模块可以在 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 libraries 像 shinyBS
、shinyjs
等时,这种情况经常发生在我身上。对于某些功能 没有必要使用 ns
功能,对于某些功能来说
一个具体的例子是 shinyjs::disable
函数,我不得不用 shinyjs::disable('checkbox')
而不是 shinyjs::disable(ns('checkbox'))
来调用它。也就是说,因为 shinyjs
在其 内部例程 中使用了 session::ns
。参见 here