在 R 中使用 doParallel 时,如何获取引发错误的行号?
Posted
技术标签:
【中文标题】在 R 中使用 doParallel 时,如何获取引发错误的行号?【英文标题】:When using doParallel in R, how can I get the line number where an error was thrown? 【发布时间】:2014-09-05 01:07:29 【问题描述】:我试图弄清楚在使用 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 时如何用异常识别行号有什么想法吗?谢谢。
【问题讨论】:
您可以使用 doMPI 后端获取工作人员回溯,但这不包括行号。并且回溯只显示在工作日志文件中,而不显示在主服务器产生的错误消息中。使用 %do% 时我想不出任何选项。 【参考方案1】:尝试修改您的 foreach
调用以包含 .verbose = TRUE
z <- foreach (i = 1:2, .verbose = T) %do% ...
【讨论】:
以上是关于在 R 中使用 doParallel 时,如何获取引发错误的行号?的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中使用 doParallel 的 foreach 时,Windows Defender 的 CPU 使用率非常高
如何使用 doParallel 计算 R 中邮政编码之间的距离?