我试图找出如何精确定位使用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识别行号的任何想法?谢谢。
答案 0 :(得分:2)
尝试修改您的foreach
来电以包含.verbose = TRUE
z <- foreach (i = 1:2, .verbose = T) %do% ...