在R中使用doParallel时,如何获取抛出错误的行号?

时间:2014-07-14 22:15:42

标签: r parallel-processing

我试图找出如何精确定位使用foreach和doParallel时引发错误的行。这是一个例子:

foreach.example <- function() 
{
    require("doParallel")
    z <- foreach (i = 1:2) %do% 
    {
       x <- i + 'a'
    }
    return(z)
}

所以在%do%中有一个错误,我在数字中添加一个字符。 (我在这里说的一切也适用于%dopar%)。当我跑步时,我得到:

> foreach.example()
Error in { (from test_foreach.R#3) : task 1 failed - "non-numeric argument     to binary operator"

我无法从这里告诉我在循环中我的错误行3是foreach行,而不是违规行。当我运行debugger()时,我得到:

> debugger()
Message:  Error in { (from test_foreach.R#3) : task 1 failed - "non-numeric    argument to binary operator"
    Available environments had calls:
1: foreach.example()
2: test_foreach.R#3: foreach(i = 1:2) %do% {
x <- i + "a"
}
3: e$fun(obj, substitute(ex), parent.frame(), e$data)
4: stop(simpleError(msg, call = expr))

请注意,第2帧通常会指示整个循环,因此我无法找到实际抛出错误的行。

如果我在没有foreach的情况下运行它,我会得到有用的信息:

regular.example <- function() 
{ 
    z <- list()
    for (i in 1:2) {
        x <- i + 'a'
        z <- c(z, list(x))
    }
    return(z)
}

>regular.example()
Error in i + "a" (from test_foreach.R#12) : non-numeric argument to binary operator

并且调试器将我带到抛出异常的代码中。

有关如何使用foreach时使用excpetion识别行号的任何想法?谢谢。

1 个答案:

答案 0 :(得分:2)

尝试修改您的foreach来电以包含.verbose = TRUE

z <- foreach (i = 1:2, .verbose = T) %do% ...