gpt4 book ai didi

r - 如何在 RStudio 中以 Debug模式运行 for 循环?

转载 作者:行者123 更新时间:2023-12-03 09:33:20 25 4
gpt4 key购买 nike

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

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

a <- function(b){

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

}

cc()

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

我将 RStudio 与调试设置一起使用:“中断代码”(调试 - 出错时 - 中断代码)。

在调试时我想运行 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

问题:

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

(准确地说,我可以运行代码,正如在上面的示例中看到的那样。但 x 的值不会改变)。

编辑:我为什么要这个?

有时我在代码中遇到意外错误,为了更好地理解它,我希望在代码的特定“错误部分”之前/之后执行代码。这很好用,除了运行 for 循环的结果没有保存到“临时调试环境”中,如示例所示。

因此,用 sapply 或类似方法替换 for 循环并不能解决它,因为 while、if 等也面临同样的挑战。

我试过的:
  • browser()可以在 for 循环中设置。但我不想事先设置它
    .我也不需要在 for 循环的某个点中断?。
  • 使用 recover()

  • 我希望循环中的内容不是我可以通过 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,(我希望我正确地遵循了说明)。

    最佳答案

    这个尝试怎么样?

    > debug(a)
    > cc()

    这样,调试开始只在一个函数中工作。
    ps

    关于r - 如何在 RStudio 中以 Debug模式运行 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033285/

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