生成一个闪亮的仪表板侧边栏菜单,其中包含基于文件输入的静态和动态选项卡

问题描述 投票:0回答:1

我正在读取 csv 文件,然后创建一个闪亮的仪表板,侧边栏上有一些选项卡,其中一些选项卡是静态的,其他选项卡将根据输入文件进行更改。例如,数据文件的简化版本可能如下所示:

姓名 扩展 系列
约翰 8648 工程师
吉尔 4783 分析师
戴夫 3749 销售
玛丽 3468 工程师

我不会提前知道csv输入文件有多长,或者“系列”列中可能包含多少个不同的作业系列。在我的仪表板上,我希望在侧边栏上有选项卡,如下所示:

  1. 一般信息 - 这将包含与公司所有员工相关的信息
  2. 接下来我想要有与每种不同员工类型(系列)相关的选项卡。我每个独特的系列价值。
  3. 然后会有其他静态选项卡。目前,我在动态选项卡后面有一个“详细分析”选项卡。

因此,对于这个示例输入文件,我将在侧边栏上显示如下所示的选项卡:

  • 一般信息
  • 分析师
  • 工程师
  • 销售
  • 详细分析

为了简单起见,我更改了数据,也因为实际数据很敏感。我想我已经接近得到我想要的了,但它只有在只有一种类型的员工(系列列)时才有效。如果有多个系列类型,我会收到一条错误消息:

错误:要写入的文本必须是长度为一的字符向量

此外,如果只有一种系列类型,我会在侧栏面板上获得正确的选项卡名称,但如果我单击它,它不会执行任何操作。我对 R 或 Shiny 没有太多的经验,我只在有时间的时候才研究它,所以我确信我在做一些愚蠢的事情。我已经查看了 Stack Overflow 上的许多其他条目,但我认为对于我的具体情况没有任何答案,而且我的知识还不够丰富,无法真正回答类似但不同的问题。

这是我正在使用的最新代码

读入 csv 文件后,我确定要为其创建选项卡的不同唯一系列值:

menu_list <- unique(employee_df$Series)

这是我的 UI 部分的相关部分:

  ui <- dashboardPage(
    dashboardHeader(title = "Employee Dashboard"),
    dashboardSidebar( 
      sidebarMenu(id = "sidebar_menu",
        menuItem("General Info", tabName = "general", icon = icon("dashboard")),
        menuItemOutput("dynamic_menu"),
        menuItem("Detailed Analysis", tabName = "analysis", icon = icon("dashboard"))
      )

这是我的服务器部分的相关部分:

  server <- function(input, output, session) {
    output$dynamic_menu <- renderMenu({
      menuItem(menu_list, icon = icon("dashboard"))    
    })
r shiny shinydashboard
1个回答
0
投票

试试这个

employee_df <- read.table(text = 
                            "Name   Extension   Series
John    8648    Engineer
Jill    4783    Analyst
Dave    3749    Sales
Mary    3468    Engineer
John2   8641    Engineer
Jill2   4781    Analyst
Dave2   3741    Sales
Mary2   3461    Engineer", header=T)

ui <- dashboardPage(
  dashboardHeader(title = "Employee Dashboard"),
  dashboardSidebar( 
    sidebarMenu(id = "sidebar_menu",  
                sidebarMenuOutput("dynamic_menu")
    )
  ),
  dashboardBody()
)

server <- function(input, output, session) {
  
  menu_list <- unique(employee_df$Series)
  
  output$dynamic_menu <- renderMenu({
    menus <- list()
    lapply(menu_list, function(tab){ 
      mytab <- sprintf("%s",tab)
      print(mytab)
      menus <<- list(menus,menuItem(mytab, tabName=mytab, icon = icon("dashboard")))
    })

    mymenu_list <- list(
    
                menuItem("General Info", tabName = "general", icon = icon("dashboard")),
                menus,
                menuItem("Detailed Analysis", tabName = "analysis", icon = icon("dashboard"))
    
    )
    sidebarMenu(.list = mymenu_list)
      
  })
}

shinyApp(ui, server)
© www.soinside.com 2019 - 2024. All rights reserved.