0

给定的 R 闪亮脚本在侧边栏中创建一个下拉菜单,其中包含主菜单项和子菜单项。当您单击第一个子项 1 时,您会在 dashboardBody 中获得两个 selectInputs。我想要一个功能,我只需声明这些输入一次并在其他子项中多次使用它,就像反应函数的方式一样。我想这样做以使脚本快速高效。我对反应性功能知之甚少,请帮助和感谢。

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)

选择输入捕获

4

1 回答 1

1

你的代码可以用 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)
于 2018-01-19T09:56:02.693 回答