Tim*_*Tim 15 error-handling r r-faq
有时R会抛出我的错误
if(ncol(x)!= 2){:参数的长度为零时出错
没有其他信息,当我没有写这样的代码.有没有一种通用的方法来查找哪个包导致错误的功能?
由于大多数软件包都是压缩的,因此grep并非易事/usr/lib/R/library.
Sac*_*amp 20
您可以使用它traceback()来查找上次发生错误的位置.通常它会指向您在函数中进行的调用.然后我通常会browser()在那时再次运行该功能,看看出了什么问题.
例如,这里有两个功能:
f2 <- function(x)
{
if (x==1) "foo"
}
f <- function(x)
{
f2(x)
}
Run Code Online (Sandbox Code Playgroud)
请注意,f2()假设一个长度参数1.我们可以滥用f:
> f(NULL)
Error in if (x == 1) "foo" : argument is of length zero
Run Code Online (Sandbox Code Playgroud)
现在我们可以traceback()用来找出出错的地方:
> traceback()
2: f2(x) at #3
1: f(NULL)
Run Code Online (Sandbox Code Playgroud)
数字表示我们在嵌套函数中的深度.所以我们看到那些f调用f2并且在线上给出了错误3.很清楚.我们现在可以在电话会议之前重新分配f,以检查它的输入.只是允许你停止执行一个函数并环顾它的环境.类似于,除了你不必执行每一行,直到你知道出错了.browserf2browser()debugdebugonce
Mat*_*rde 18
只是添加@SachaEpskamp已经建议的内容,设置options(error=recover)并options(show.error.locations=TRUE)在调试不熟悉的代码时非常有用.第一个导致R在出错时启动调试会话,使您可以选择在调用堆栈中的任何位置调用浏览器直到该错误.第二个选项将告诉R在错误中包含源行号.
| 归档时间: |
|
| 查看次数: |
12330 次 |
| 最近记录: |