在多个 subMenuItems 下在 R shiny 中使用类似的 UI 脚本
Using similar UI script in R shiny under multiple subMenuItems
给定的 R shiny 脚本在侧边栏中创建了一个下拉菜单,其中包含主菜单项和子菜单项。当你点击第一个 sub-item 1 时,你会在 dashboardBody 中得到两个 selectInputs。我想要一个功能,我只需声明一次这些输入并在其他 sub-item 中多次使用它,就像反应函数 does.I 想要这样做以使脚本快速高效一样。我对反应功能知之甚少,请帮助并感谢。
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("Charts", icon = icon("bar-chart-o"),
menuSubItem("Sub-item 1", tabName = "subitem1"),
menuSubItem("Sub-item 2", tabName = "subitem2"),
menuSubItem("Sub-item 3", tabName = "subitem3"),
menuSubItem("Sub-item 4", tabName = "subitem4")
))),
dashboardBody(
tabItems(
tabItem("subitem1", column(2,offset = 0, style='padding:1px;',
selectInput("select1","select1",c("A1","A2","A3"), selected = "A1")),
column(2,offset = 0, style='padding:1px;',
selectInput("select2","select2",c("A3","A4","A5"), selected = "A3"))),
tabItem("subitem2", "Widgets tab content"),
tabItem("subitem3", "Sub-item 1 tab content"),
tabItem("subitem4", "Sub-item 2 tab content"))))
server <- function(input, output, session) {
}
shinyApp(ui, server)
您的代码可以用 shiny modules
重写。要显示两个下拉菜单的 UI 模块可以写成一个(Ui 函数),然后可以在您想要的地方引用。
修改后的代码:
library(shiny)
library(shinydashboard)
submenuUI <- function(id) {
ns <- NS(id)
# return a list of tags
tagList(
column(2,offset = 0, style='padding:1px;',
selectInput(ns("select1"),"select1",c("A1","A2","A3"), selected = "A1")),
column(2,offset = 0, style='padding:1px;',
selectInput(ns("select2"),"select2",c("A3","A4","A5"), selected = "A3"))
)
}
submenu <- function(input,output,session){}
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("Charts", icon = icon("bar-chart-o"),
menuSubItem("Sub-item 1", tabName = "subitem1"),
menuSubItem("Sub-item 2", tabName = "subitem2"),
menuSubItem("Sub-item 3", tabName = "subitem3"),
menuSubItem("Sub-item 4", tabName = "subitem4")
))),
dashboardBody(
tabItems(tabItem("subitem1", submenuUI('submenu1')),
tabItem("subitem2", submenuUI('submenu2')),
tabItem("subitem3", submenuUI('submenu3')),
tabItem("subitem4", "Sub-item 2 tab content"))))
server <- function(input, output, session) {
callModule(submenu, "submenu")
}
shinyApp(ui, server)
给定的 R shiny 脚本在侧边栏中创建了一个下拉菜单,其中包含主菜单项和子菜单项。当你点击第一个 sub-item 1 时,你会在 dashboardBody 中得到两个 selectInputs。我想要一个功能,我只需声明一次这些输入并在其他 sub-item 中多次使用它,就像反应函数 does.I 想要这样做以使脚本快速高效一样。我对反应功能知之甚少,请帮助并感谢。
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("Charts", icon = icon("bar-chart-o"),
menuSubItem("Sub-item 1", tabName = "subitem1"),
menuSubItem("Sub-item 2", tabName = "subitem2"),
menuSubItem("Sub-item 3", tabName = "subitem3"),
menuSubItem("Sub-item 4", tabName = "subitem4")
))),
dashboardBody(
tabItems(
tabItem("subitem1", column(2,offset = 0, style='padding:1px;',
selectInput("select1","select1",c("A1","A2","A3"), selected = "A1")),
column(2,offset = 0, style='padding:1px;',
selectInput("select2","select2",c("A3","A4","A5"), selected = "A3"))),
tabItem("subitem2", "Widgets tab content"),
tabItem("subitem3", "Sub-item 1 tab content"),
tabItem("subitem4", "Sub-item 2 tab content"))))
server <- function(input, output, session) {
}
shinyApp(ui, server)
您的代码可以用 shiny modules
重写。要显示两个下拉菜单的 UI 模块可以写成一个(Ui 函数),然后可以在您想要的地方引用。
修改后的代码:
library(shiny)
library(shinydashboard)
submenuUI <- function(id) {
ns <- NS(id)
# return a list of tags
tagList(
column(2,offset = 0, style='padding:1px;',
selectInput(ns("select1"),"select1",c("A1","A2","A3"), selected = "A1")),
column(2,offset = 0, style='padding:1px;',
selectInput(ns("select2"),"select2",c("A3","A4","A5"), selected = "A3"))
)
}
submenu <- function(input,output,session){}
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("Charts", icon = icon("bar-chart-o"),
menuSubItem("Sub-item 1", tabName = "subitem1"),
menuSubItem("Sub-item 2", tabName = "subitem2"),
menuSubItem("Sub-item 3", tabName = "subitem3"),
menuSubItem("Sub-item 4", tabName = "subitem4")
))),
dashboardBody(
tabItems(tabItem("subitem1", submenuUI('submenu1')),
tabItem("subitem2", submenuUI('submenu2')),
tabItem("subitem3", submenuUI('submenu3')),
tabItem("subitem4", "Sub-item 2 tab content"))))
server <- function(input, output, session) {
callModule(submenu, "submenu")
}
shinyApp(ui, server)