gpt4 book ai didi

r - 使用浏览器时在调用堆栈中搜索对象

转载 作者:行者123 更新时间:2023-12-04 19:09:06 24 4
gpt4 key购买 nike

当使用浏览器调试在多个级别调用其他函数的函数时,通常很难知道要进入哪个级别来检查特定变量。当函数包含 apply 时,它是神秘的, sapply , lapply调用产生中间水平。有没有办法在堆栈的所有级别上按名称搜索变量?

假设我有以下函数,在 f3 中产生错误.我假设当进入第 5 级时,我应该能够使用 pos 列出当前所在环境之上的任何环境的内容。或 envir以某种方式争论,但我不知道如何。例如,我如何查找 v2 ?

f1 <- function(){
v1 <- 1
sapply(1:3, f2)
}
f2 <- function(...){
v2 <- 2
f3()
}
f3 <- function(){
v3 <- 3
stop("Oh no!")
}
> options(error=recover)
> f1()

Error in f3() : Oh no!

Enter a frame number, or 0 to exit

1: f1()
2: #3: sapply(1:3, f2)
3: lapply(X = X, FUN = FUN, ...)
4: FUN(1:3[[1]], ...)
5: #3: f3()

最佳答案

您在 list 中获得调用堆栈与 sys.frames .在这种情况下,如果您调用 sys.framesbrowser 之后开始,你会得到一个 list长度为 9。帧 6-9 包括引发错误的调用和启动 browser 所涉及的调用。 (您可以通过调用 sys.calls 看到这一点)。前五帧显示在调用堆栈中,recover打印。一旦browser开始,您可以查看示例中调用堆栈的每个级别的 namespace

lapply(sys.frames()[1:5], ls)

或搜索包含变量的框架
which(sapply(sys.frames(), function(frame) 'v2' %in% ls(frame)))

关于r - 使用浏览器时在调用堆栈中搜索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com