在Shiny中追踪UI警告
下面的Shiny应用将会触发如下警告:
警告:导航容器期望包含一组
bslib::nav\_panel()/shiny::tabPanel()s和/或bslib::nav\_menu()/shiny::navbarMenu()s。若你希望将内容放在每个面板内容的上方(或下方),请考虑使用header或footer。
这个警告的原因很清楚。
我想知道是否有办法追踪这个警告的来源(行号)。
这个用例是一个更大的应用,多次调用 shinydashboard::tabBox。
我尝试使用 devmode 以及RStudio中的不同调试选项,但到目前为止还没有可用的参考信息。
library(shiny)
devmode()
options(warn = 2, shiny.error = browser, shiny.fullstacktrace = TRUE, shiny.trace = TRUE)
ui <- function(request){
fluidPage(
tabsetPanel(
div("This will raise a warning. What is my linenumber?")
)
)
}
server <- function(input, output, session) {}
shinyApp(ui, server)
Here 可以在Posit社区找到一个跨帖。
解决方案
如果ui是一个函数,你可以直接调用ui(),这将结合warn = 2和你设置的其他选项,应该暴露一个可用的调用栈。
library(shiny)
options(warn = 2, error = rlang::entrace)
ui <- function(request){
fluidPage(
tabsetPanel(
div("This will raise a warning. What is my linenumber?")
)
)
}
ui()
#> Error:
#> ! (converted from warning) Navigation containers expect a collection of `bslib::nav_panel()`/`shiny::tabPanel()`s and/or `bslib::nav_menu()`/`shiny::navbarMenu()`s. Consider using `header` or `footer` if you wish to place content above (or below) every panel's contents.
rlang::last_trace()
#> <error/rlang_error>
#> Error:
#> ! (converted from warning) Navigation containers expect a collection of `bslib::nav_panel()`/`shiny::tabPanel()`s and/or `bslib::nav_menu()`/`shiny::navbarMenu()`s. Consider using `header` or `footer` if you wish to place content above (or below) every panel's contents.
#> ---
#> Backtrace:
#> ▆
#> 1. └─global ui()
#> 2. ├─shiny::fluidPage(tabsetPanel(div("This will raise a warning. What is my linenumber?")))
#> 3. │ ├─shiny::bootstrapPage(...)
#> 4. │ │ └─rlang::list2(...)
#> 5. │ └─htmltools::div(class = "container-fluid", ...)
#> 6. │ └─rlang::dots_list(...)
#> 7. └─shiny::tabsetPanel(div("This will raise a warning. What is my linenumber?"))
#> 8. ├─shiny:::remove_first_class(...)
#> 9. └─bslib (local) func(..., id = id, selected = selected, header = header, footer = footer)
#> 10. └─bslib (local) new(...)
#> 11. └─bslib:::tabsetPanel_(...)
#> 12. └─bslib:::buildTabset(...)
#> 13. └─base::lapply(...)
#> 14. └─bslib (local) FUN(X[[i]], ...)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。