基于Golem框架开发Shiny应用时出现‘argument "body" is missing, with no default’错误的技术求助
解决Shiny + Golem应用中
argument "body" is missing, with no default错误 我帮你定位到了问题的根源:你在使用shinydashboard::dashboardPage时,没有正确传入必需的body参数——你的dashboardBody被错误地放在了navbarPage的外部,导致dashboardPage初始化时缺少了核心的主体部分,这就是触发报错的直接原因。
错误原因详解
shinydashboard::dashboardPage的语法规则明确要求必须包含三个关键参数:header、sidebar和body。你的代码里,dashboardBody被写在了navbarPage的闭合括号之后,这就导致dashboardPage只接收到了header和sidebar,完全没拿到body参数,自然会抛出argument "body" is missing的错误。
修复后的代码
下面是调整结构后的app_ui函数,我把dashboardBody移到了dashboardPage内部,确保三个核心参数完整传入:
app_ui <- function(request) { tagList( golem_add_external_resources(), shinyUI( navbarPage( windowTitle = "Page", title = div(img(src = ".png", height = "30px"), "Toolbox"), theme = shinythemes::shinytheme("cerulean"), tabPanel("Toolbox", icon = icon("wrench"), shinydashboard::dashboardPage( skin = "black", header = shinydashboard::dashboardHeader(title = "Toolbox", titleWidth = 300), sidebar = shinydashboard::dashboardSidebar( width = 300 , shinydashboard::sidebarMenu( shinydashboard::menuItem( "Tools", tabName = "tools_app", icon = icon("wrench"), shinydashboard::menuSubItem( "Gene Expression/Signature/Pathways", tabName = "gene_app", icon = icon("chart-line") ), shinydashboard::menuSubItem( "Genomic", tabName = "genomic_app", icon = icon("universal-access") ), ) ) ), # 将dashboardBody作为dashboardPage的第三个参数传入 body = shinydashboard::dashboardBody( shinydashboard::tabItems( shinydashboard::tabItem("tools_app", mod_tools_path_ui("tools_path_ui_1")), shinydashboard::tabItem("gene_app",mod_gene_expressions_sign_path_ui("gene_expression_sign_path_ui_1")), shinydashboard::tabItem("genomic_app", mod_genomic_ui("genomic_ui_1")) ) ) ) ) ) ) ) }
关键调整说明
- 把原本在
navbarPage外部的dashboardBody,移动到dashboardPage内部,作为命名参数body = ...传入 - 确保
dashboardPage的三个核心参数(header、sidebar、body)都完整传递,符合函数的语法要求
调整完成后,你可以重新运行应用测试,这个错误应该就能解决了。
内容的提问来源于stack exchange,提问作者GaB




