构建Shiny数据可视化应用触发tagAssert报错,请求排查代码问题
报错原因
你遇到的报错是shinydashboard的页面结构写错导致的:dashboardPage()函数需要传入三个平级的参数,分别是dashboardHeader()、dashboardSidebar()、dashboardBody(),你的代码把dashboardBody()错误嵌套进了dashboardSidebar()的内部,导致dashboardPage()缺少必填的body参数,直接抛出错误。
其他代码问题
除了结构错误外,你的代码还有几处逻辑问题需要修正:
- 用到
tabItem()组件时,必须在外层包裹tabItems()容器,否则标签页功能无法正常触发 - 服务端逻辑中引用了
input$file2、input$oncoslider两个输入控件,但UI部分完全没有定义这两个控件 aff响应式表达式中变量名写错:定义的变量是lamlgh.maf,后续调用时误写为laml.maf
修正后完整代码
library(shiny) library(shinydashboard) library(maftools) ui <- dashboardPage( dashboardHeader(title = "Data Annotation"), dashboardSidebar( # 侧边栏补全代码中用到的控件定义,可根据需求调整参数 sliderInput("oncoslider", "展示突变基因数量", min = 10, max = 50, value = 20), fileInput("file2", "选择临床注释文件(可选)", multiple = FALSE, accept = c(".tsv", ".csv")) ), dashboardBody( tabItems( tabItem(tabName = "File Input", fileInput("file1", "选择MAF文件", multiple = FALSE, accept = c(".maf",".maf.gz"))), tabItem(tabName = "oncoplots", plotOutput("oncoplots")) ) ) ) server <- function(input, output) { usrvar <- reactive({ validate(need(input$file1$datapath != "", "请上传MAF文件。")) if (is.null(input$file2$datapath)){ read.maf(input$file1$datapath) } else { read.maf(maf = input$file1$datapath , clinicalData = input$file2$datapath) } }) aff <- reactive({ lamlgh.maf = system.file('extdata', 'tcga_laml.maf.gz', package = 'maftools') laml = read.maf(maf = lamlgh.maf) faf <- list(getFields(laml)) return(faf) }) output$oncoplots <- renderPlot({ oncoplot(maf = usrvar() , top = input$oncoslider) }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者Miyaji_K
相关产品推荐
相关产品推荐

