R 编程/调试
外观
< R 编程
一些基本提示
[edit | edit source]- 在函数中使用
print()
语句打印变量值。 尽管这种技术被一些人认为是低技术或过时,但它仍然可以成为快速简便地跟踪错误的方法。 - 在函数中崩溃行之前放置一个
browser()
语句。 当函数被调用时,它将被执行到browser()
行。 然后命令行界面切换到函数环境,以便可以检查或更改函数中的所有变量。 有关browser()
模式下可用的命令,请参阅以下内容。
使用traceback()
跟踪错误
[edit | edit source]R 中的标准错误消息将告诉您哪个函数引发了错误。 以以下函数为例,其唯一目的是引发错误。
myFun <- function(){
stop("Woops! An error")
}
对myFun()
的调用给出
> myFun()
Error in myFun() : Woops! An error
在引发错误后,traceback()
函数允许您显示导致错误的调用堆栈。 例如,以下函数调用myFun
。
myFun2 <- function(){
myFun()
}
调用myFun2()
和traceback()
给出
> myFun2()
Error in myFun() : Woops! An error
> traceback()
3: stop("Woops! An error")
2: myFun()
1: myFun2()
traceback()
函数每次引发错误时都可以自动执行,选项为
options(error=traceback)
它可以用以下方式再次关闭
options(error=NULL)
逐行执行代码
[edit | edit source]一个函数可以通过将其设置为调试模式来执行
debug(FUNCTION_NAME)
.
然后,当函数被调用时,将在该函数的环境中打开一个浏览器,以便可以逐行执行它。 在调试浏览器中,除了所有标准的 **R** 功能外,还可以使用以下命令。
命令 | 含义 |
---|---|
n |
前进到下一步。 空行也可以。 |
c , cont |
继续到当前上下文的结尾。 例如,到循环内的循环的结尾或函数的结尾。 |
where |
打印函数调用的堆栈(你在哪里?) |
Q |
退出浏览器并返回到顶级 **R** 提示符。 |
调试可以用以下方式关闭
undebug(FUNCTION_NAME)
还有一些相关的函数
debugonce()
在第一次调用后关闭调试。isdebugged()
检查函数是否处于调试模式。
浏览调用堆栈
[edit | edit source]这是 **R base** 中最先进的调试选项。 通过设置 options(error=recover)
,您将有机会浏览调用堆栈中的任何环境。 例如,
> options(error=recover)
> myFun2()
Error in myFun() : Woops! An error
Enter a frame number, or 0 to exit
1: myFun2()
2: myFun()
Selection:
在Selection:
后面输入“1”或“2”,浏览器将跳转到选定的环境。进入浏览器后,所有标准的R功能都可供使用,以及下表中的命令。
命令 | 含义 |
---|---|
c , cont |
退出浏览器,并继续执行下一条语句。空行将执行相同操作。 |
n |
进入单步调试器(这会改变c 的含义)。 |
where |
打印活动函数调用的堆栈跟踪(你在堆栈中的位置?)。 |
Q |
退出浏览器,不要继续执行下一条语句,而是返回到顶层R浏览器。 |
可以通过以下方式关闭恢复模式
options(error=NULL)