Returns 根据ID点击菜单后的DF信息(闪亮)

Returns DF information after clicking menu based on ID (Shiny)

在下面的 Shiny 代码中,我需要使用选定的菜单 ID return 到 dashboardBody()“您选择了 'name'”。 对当前代码的改进将不胜感激,我正在学习并将我的 R 脚本项目迁移到 Shiny。

library(shiny)
library(shinydashboard)

labels = data.frame(id = c(seq.int(nrow(mtcars))),
                    name = c(rownames(mtcars)))

##### UI ##### 
ui <- dashboardPage(
    dashboardHeader(title = "Example"),
    
    dashboardSidebar(
        sidebarMenu(id="mytabs",
                    sidebarMenuOutput("menu"))
    ),
    
    dashboardBody()
)

##### SERVER #####
server <- function(input, output, session) {
    output$menu <- renderMenu({
        myTabs = lapply(1:nrow(labels) , function(i) {
            menuItem(labels$name[i], tabName = labels$id[i])
        })
        do.call(sidebarMenu, myTabs)
    })
}

##### Run the application #####
shinyApp(ui = ui, server = server)

这可以这样实现:

  1. 您可以通过input$mytabs
  2. 获取所选菜单项的id
  3. 标签来自 labels$name[as.integer(input$mytabs)]
    library(shiny)
    library(shinydashboard)
    
    labels = data.frame(id = c(seq.int(nrow(mtcars))),
                        name = c(rownames(mtcars)))
    
    ##### UI ##### 
    ui <- dashboardPage(
      dashboardHeader(title = "Example"),
      
      dashboardSidebar(
        sidebarMenu(id="mytabs",
                    sidebarMenuOutput("menu"))
      ),
      
      dashboardBody(
        textOutput("text")
      )
    )
    
    ##### SERVER #####
    server <- function(input, output, session) {
      output$menu <- renderMenu({
        myTabs = lapply(1:nrow(labels) , function(i) {
          menuItem(labels$name[i], tabName = labels$id[i])
        })
        do.call(sidebarMenu, myTabs)
      })
      
      output$text <- reactive({
        req(input$mytabs)
        paste("You chose", labels$name[as.integer(input$mytabs)])
      })
    }
    
    ##### Run the application #####
    shinyApp(ui = ui, server = server)