如何解决获取在闪亮的应用程序中调用的函数的堆栈跟踪
当其中包含许多多层调用的冗长且复杂的函数引发错误时,可能很难在不查看堆栈跟踪的情况下理解该错误。但是,当 shiny 应用程序调用此函数以处理其输入时,堆栈跟踪似乎仅显示该应用程序中发生的情况,而不显示其调用的函数。这是一个基于哈德利·威克姆(Hadley Wickham)的 Mastering Shiny 的6.3.1节中的代码的代表:
library(shiny)
f <- function(.x){
# A function with many multi-layered calls.
x_new <- as.numeric(.x)
f_result <- g(x_new)
return(f_result)
}
g <- function(.y){
# Represents a few layers of calls between f() and h().
y_new <- min(.y,1024)
g_result <- h(y_new)
return(g_result)
}
h <- function(.z){
# A call several layers down.
#
if(.z == 3) stop("Value of 3 not allowed")
h_result <- .z * 2
return(h_result)
}
ui <- fluidPage(
selectInput("n","N",1:10),plotOutput("plot")
)
server <- function(input,output,session) {
output$plot <- renderPlot({
n <- f(input$n)
plot(head(cars,n))
})
}
shinyApp(ui,server)
用户输入3时,会将以下内容返回到控制台:
Warning: Error in h: Value of 3 not allowed
[No stack trace available]
所以我可以看到错误发生在 h()中,但是没有发生由 g()代表的一系列调用,导致我 h()。使用包含命令的文件 run.R 运行应用程序时
runApp('T://someNetworkDirectory//App-1',launch.browser=TRUE)
使用 App-1 包含文件 app.R ,详细信息略有不同,但是 结果是一样的; traceback()仅显示直到 应用开始运行的位置。捕获显示应用程序调用的函数如何达到错误的堆栈跟踪的最佳方法是什么?
解决方法
诀窍是保存您的Shiny应用程序,然后使用runApp("path_to_app_dir")
启动该应用程序(如section 6.2.1末尾在掌握Shiny中所述)。然后我得到以下堆栈跟踪:
Warning: Error in h: Value of 3 not allowed
171: stop
170: h [C:\path\Shiny\shiny_example/app.R#20]
169: g [C:\path\Shiny\shiny_example/app.R#13]
168: f [C:\path\Shiny\shiny_example/app.R#6]
167: renderPlot [C:\path\Shiny\shiny_example/app.R#31]
165: func
125: drawPlot
111: <reactive:plotObj>
95: drawReactive
82: origRenderFunc
81: output$plot
1: runApp
诚然,当我运行Shiny以外的功能时,它们并不完全相同,而是关闭:
Error in h(y_new) : Value of 3 not allowed
4.
stop("Value of 3 not allowed")
3.
h(y_new)
2.
g(x_new)
1.
f(3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。