You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用shiny dashboard动态侧边栏时出现mongolite报错如何解决

报错根因

该报错由R包命名空间冲突触发:mongolite包内置了同名的menuItem函数,若mongolite的加载顺序晚于shinydashboard,全局环境中的menuItem会默认指向mongolite的实现。动态生成侧边栏时是运行时调用该函数,会触发MongoDB连接相关的参数校验,因此抛出is.character(db) not TRUE的报错;而静态侧边栏是在应用启动加载阶段就完成渲染,调用的是先加载的shinydashboard的menuItem,因此不会触发报错。

除此之外你的代码还存在两处需要修正的问题:

  • 客户端输出ID拼写错误:siderbarMenuOutput应为sidebarMenuOutput
  • lapply生成的是菜单列表,需要包裹在sidebarMenu中才能被renderMenu正常识别,同时你原有代码中menuItem的调用缺少右括号

解决方案

方案1(最稳妥,无后续冲突隐患)

调用时显式指定menuItem的所属包,完全避免命名空间覆盖的影响,修正后的代码如下:

客户端代码

sidebarMenuOutput('menu')

服务端代码

output$menu <- renderMenu({
    menu_list <- lapply(c('1','2','3'), function(x) {
        # 显式指定使用shinydashboard的menuItem实现
        shinydashboard::menuItem(x, tabName = paste0('item_',x))
    })
    # 将菜单列表传入sidebarMenu
    do.call(shinydashboard::sidebarMenu, menu_list)
})

方案2(调整包加载顺序)

调整全局代码中包的加载顺序,确保library(shinydashboard)写在library(mongolite)之后,让后加载的shinydashboard的menuItem覆盖mongolite的同名函数即可解决问题。

内容的提问来源于stack exchange,提问作者Александр Вьюн

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:54:02