如何在 RStudio 中以调试模式 运行 for 循环?

How to run for loop in debug mode within RStudio?

我有以下代码来获得可重现的错误:

cc <- function(){
  a(2)  
}

a <- function(b){

  x <- rep(NA, 3)
  for(nr in 1:3){
    x[nr] <- nr
  }
  a*2

}

cc()

(请注意,这是一个示例错误,我没有兴趣解决它。这只是一个最小的可重现示例,它允许我有一个我们进入调试模式的示例)。

我将 RStudio 与调试设置一起使用:"Break in Code"(调试 - 出错 - 代码中断)。

调试时我想 运行 for 循环但我不能:

> cc()
Error in a * 2 : non-numeric argument to binary operator
Called from: a(2)
Browse[1]> x <- NULL
Browse[1]> for(nr in 1:3){
+     x[nr] <- nr
+   }
debug at #2: x[nr] <- nr
Browse[4]> x
NULL

问题:

如何在调试模式下运行 for循环、if语句、while等(并将相应的结果存储在"debugging Environment"中)?

(准确地说,我可以 运行 代码,如上例所示。但是 x 的值不会改变)。

编辑:我为什么要这个?

有时我在我的代码中遇到意外错误,为了更好地理解它,我希望在我的代码的特定 "error part" 之前/之后执行代码。这很好用,除了 运行for 循环的结果没有保存到 "temporary debug Environment" 中,如示例所示。

因此,用 sapply 或类似方法替换 for 循环不会解决问题,因为同样的挑战适用于 while、if 等

我试过的:

我希望循环中的内容不是我可以通过 recover(),...

访问的额外环境

尝试遵循 James Curran 的解决方案:

> debug(cc)
> cc()
debugging in: cc()
debug at
 #1: {
    a(2)
}
Browse[2]> debug(a)
Browse[2]> a(2)
debugging in: a(2)
debug at #1: {
    x <- rep(NA, 3)
    for (nr in 1:3) {
        x[nr] <- nr
    }
    a * 2
}
Browse[4]> x <- rep(NA, 3)
Browse[4]> for(nr in 1:3){
+     x[nr] <- nr
+   }
debug at #2: x[nr] <- nr
Browse[5]> a*2
Error in a * 2 : non-numeric argument to binary operator
Browse[7]> x
[1] NA NA NA

我似乎没有更改 X,(我希望我按照说明正确操作)。

使用 R 中的 debug 函数。在调用 cc 之前执行

debug(cc)

然后调用cc。在调试模式下输入 cc 后,您可能还想调试 a,因此键入

debug(a)

然后继续。

这次试试怎么样?

> debug(a)
> cc()

这样调试就开始只在一个函数中起作用了。