Исходный файл, а не его запуск, и после возникновения ошибки запустите
traceback()
в консоли. Когда я делаю это на вашем простом примере, я вижу это:
> traceback()
11: tag("section", list(...))
10: tags$section(id = "sidebarItemExpanded", class = "sidebar", `data-disable` = if (disable) 1 else NULL,
list(...))
9: tag("aside", list(...))
8: tags$aside(id = "sidebarCollapsed", class = "main-sidebar", `data-collapsed` = dataValueString,
custom_css, tags$section(id = "sidebarItemExpanded", class = "sidebar",
`data-disable` = if (disable) 1 else NULL, list(...)))
7: dashboardSidebar(sidebarMenu(menuItem(text = "Tab One", tabName = "tab1"),
menuItem(text = "Tab Two", tabName = "tab2"), id = "sidebar"),
)
6: tagAssert(sidebar, type = "aside", class = "main-sidebar")
5: dashboardPage(dashboardHeader(title = "test"), dashboardSidebar(sidebarMenu(menuItem(text = "Tab One",
tabName = "tab1"), menuItem(text = "Tab Two", tabName = "tab2"),
id = "sidebar"), ), dashboardBody()) at .active-rstudio-document#4
4: eval(ei, envir)
3: eval(ei, envir)
2: withVisible(eval(ei, envir))
1: source("~/.active-rstudio-document", echo = TRUE)
Обратите внимание, что выражение, помеченное 5:
, содержит информацию о номере строки: .active-rstudio-document#4
. Это файл, который RStudio сохранил перед поиском, а часть #4
говорит, что проблема в строке 4. Строка 4 - это большой вызов dashboardPage
. Вы не получите более тонких деталей, если не разбиваете код на более мелкие выражения. Это будет действительно неестественно, и, надеюсь, не будет необходимости, но вы могли бы написать оригинал как
library(shiny)
library(shinydashboard)
header <- dashboardHeader(title = "test")
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem(text = "Tab One",tabName = "tab1"),
menuItem(text = "Tab Two",tabName = "tab2"),
id = "sidebar"), # an extra comma here!
)
body <- dashboardBody()
ui <- dashboardPage(
header,
sidebar,
body
)
server <- function(input,output){}
shinyApp(ui,server)
Когда я это делаю, traceback()
включает эту строку:
5: dashboardSidebar(sidebarMenu(menuItem(text = "Tab One", tabName = "tab1"),
menuItem(text = "Tab Two", tabName = "tab2"), id = "sidebar"),
) at .active-rstudio-document#5
, который говорит мне, откуда возникла проблема.
Отредактировано, чтобы добавить: Другой способ увидеть трассировку - запустить
options(error = recover)
перед поиском всего. Прогон умрет с дисплеем, подобным дисплею traceback()
, но отформатирован по-другому. Это также позволяет вам исследовать переменные в каждом из фреймов оценки, что, вероятно, не полезно в этом примере, но иногда очень полезно.