使用闪亮的模块创建 navbarMenu 和 tabPanel
Creating navbarMenu and tabPanel using shiny modules
我想创建一个闪亮的应用程序,使用 navbarMenu()
和 tabPanel()
来显示数据表。我打算使用闪亮模块创建 R/tabUI.R
和 R/tabServer.R
的概念来生成这些表,而不是将所有代码都写在一个 app.R
文件中。
但是,我 运行 出错了,无法弄清楚。感谢任何建议和帮助!
我的代码:
### R/tabUI.R
tabUI <- function(id) {
tagList(
navbarMenu("display table",
tabPanel(NS(id, "mtcars table"),
DT::dataTableOutput("table")
)
)
)
}
### R/tabServer.R
tabServer <- function(id) {
moduleServer(id, function(input, output, session){
output$table <- DT::renderDataTable(mtcars)
})
}
### app.R
library(shiny)
ui <- navbarPage("dashboard",
tabUI("table1")
)
server <- function(input, output, session){
tabServer("table1")
}
shinyApp(ui=ui, server=server)
错误:
> runApp()
Error: Navigation containers expect a collection of `bslib::nav()`/`shiny::tabPanel()`s and/or `bslib::nav_menu()`/`shiny::navbarMenu()`s. Consider using `header` or `footer` if you wish to place content above (or below) every panel's contents.
您不能在 navbarPage()
中使用 tagList()
,因此您需要将其从模块中删除。
作为旁注,您应该在模块的开头定义 ns <- NS(id)
,然后将所有 id 包装在 ns()
中。在您的代码中,table id 未包含在 ns()
中,因此未显示。
固定码:
### R/tabUI.R
tabUI <- function(id) {
ns <- NS(id)
navbarMenu("display table",
tabPanel(ns("mtcars table"),
DT::dataTableOutput(ns("table"))
)
)
}
### R/tabServer.R
tabServer <- function(id) {
moduleServer(id, function(input, output, session){
output$table <- DT::renderDataTable(mtcars)
})
}
### app.R
library(shiny)
ui <- navbarPage("dashboard",
tabUI("table1")
)
server <- function(input, output, session){
tabServer("table1")
}
shinyApp(ui=ui, server=server)
我想创建一个闪亮的应用程序,使用 navbarMenu()
和 tabPanel()
来显示数据表。我打算使用闪亮模块创建 R/tabUI.R
和 R/tabServer.R
的概念来生成这些表,而不是将所有代码都写在一个 app.R
文件中。
但是,我 运行 出错了,无法弄清楚。感谢任何建议和帮助!
我的代码:
### R/tabUI.R
tabUI <- function(id) {
tagList(
navbarMenu("display table",
tabPanel(NS(id, "mtcars table"),
DT::dataTableOutput("table")
)
)
)
}
### R/tabServer.R
tabServer <- function(id) {
moduleServer(id, function(input, output, session){
output$table <- DT::renderDataTable(mtcars)
})
}
### app.R
library(shiny)
ui <- navbarPage("dashboard",
tabUI("table1")
)
server <- function(input, output, session){
tabServer("table1")
}
shinyApp(ui=ui, server=server)
错误:
> runApp()
Error: Navigation containers expect a collection of `bslib::nav()`/`shiny::tabPanel()`s and/or `bslib::nav_menu()`/`shiny::navbarMenu()`s. Consider using `header` or `footer` if you wish to place content above (or below) every panel's contents.
您不能在 navbarPage()
中使用 tagList()
,因此您需要将其从模块中删除。
作为旁注,您应该在模块的开头定义 ns <- NS(id)
,然后将所有 id 包装在 ns()
中。在您的代码中,table id 未包含在 ns()
中,因此未显示。
固定码:
### R/tabUI.R
tabUI <- function(id) {
ns <- NS(id)
navbarMenu("display table",
tabPanel(ns("mtcars table"),
DT::dataTableOutput(ns("table"))
)
)
}
### R/tabServer.R
tabServer <- function(id) {
moduleServer(id, function(input, output, session){
output$table <- DT::renderDataTable(mtcars)
})
}
### app.R
library(shiny)
ui <- navbarPage("dashboard",
tabUI("table1")
)
server <- function(input, output, session){
tabServer("table1")
}
shinyApp(ui=ui, server=server)