我想知道在R中使用browser()函数进行调试时是否有方法返回到上一步。
更多详情:我试图调试一个函数,以发现我的一个变量何时在循环中变成“NaN”。所以,在这个循环的每次迭代中,我调用一个函数“foo”来获取“X”的值。目前,我点击“F10”(相当于控制台中的输入“n”),直到我的变量X变成“NaN”。
我的问题是,我想后退一步,在X变成NaN之前进入函数“foo”内部,以研究那里发生了什么。
我知道我可以在每次循环迭代中得到函数“foo”的内部,但这种方法会很麻烦。
是否可以返回到以前执行的函数“foo”?
编辑为了更好地解释我需要什么,这里有一个我想要的玩具例子。
当我运行foo函数时,我收到一些关于NaN的警告。
foo函数是这样的:
foo <- function(){
X0 = 1
for( i in 1:1000){
X <- foo.bar(X0)
X0 <- X
}
}
有时,foo.bar()函数返回NaN。我的目的是在发生这种情况时进入foo.bar(),以调查这种不良结果的原因。
问题是我不知道foo.bar在运行函数之前是否会返回NaN。
注:www.example.com中的所有例程foo.bar是确定性的(即不依赖于随机生成的值)。
1条答案
按热度按时间h7appiyu1#
我以一种虚伪的方式做这件事。假设你将要执行第100行,但是你想“返回”到第98行。首先,手动恢复在第98或99行中更改的所有变量。根据您的代码,您可能能够做一些简单的事情,如
foo <- 1:10
(其中第99行已经完成了foo<- foo + bar^2
),或者可能在当前调试级别执行前一个块(例如,第90:97行)以重建变量。然后复制/粘贴行98以再次执行,或者手动修改变量或命令本身以改变结果。