我了个去,在通过在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'仍然不是。这是一个开始,但不是所有的方式。
我不知道如何改善这一点(也有兴趣知道是否有可能)。
它似乎从内部函数geterrmessage获取错误消息;如果它在那里被截断(它似乎是),修复错误信息可能也相当困难。有关内部函数的代码,请参阅https://svn.r-project.org/R/branches/R-2-14-branch/src/main/errors.c中的函数'do_geterrmessage'。 – Aaron 2012-02-28 12:22:28