覆盖R的不完整错误消息

时间:2012-02-28 05:23:49

标签: r cran

当存在多行的调用时,潜在的错误只包括match.call()的第一行,导致一些丢失的信息和一个不完整的句子。一个简单的例子:

#proper error message:
runif(n=1, k=5)

#incomplete error message:
runif(n=1, k={5})

什么方法可以让R包含对错误消息的完整调用(可能通过折叠多行等)?我最感兴趣的是在tryCatch设置中使用它。

1 个答案:

答案 0 :(得分:3)

我通过以下方式调查tryCatch设置中的错误对象:

tryCatch( runif(n=1,k={5}),
          error = function(e) recover() )

然后选择第4个环境(value[[3]](cond))来检查e

我注意到e$call是:

Browse[1]> e$call
runif(n = 1, k = {
    5
})

所以似乎错误消息只使用了第一行。

您可以使用以下方式折叠所有行:

Browse[1]> paste(deparse(e$call),collapse='')
[1] "runif(n = 1, k = {    5})"

所以你可以尝试类似的东西:

tryCatch( runif(n=1,k={5}),
          error = function(e) {
            cat(sprintf('Error in %s: %s\n',
                 paste(deparse(e$call),collapse=''),
                 e$message))
          } )

但这并没有解决错误信息本身,只是导致它的通话:

  

runif出错(n = 1,k = {5}):未使用的参数(k = {

所以'xxx中的错误'已经完成,但'未使用的参数xxx'仍未完成。这是一个开始,但不是一直都在那里。

我不确定如何改进(并且我也有兴趣知道它是否可行)。