如何将“...”参数传递给从foreach()调用的函数?

时间:2013-01-05 00:13:12

标签: r foreach parallel-processing

以下代码生成警告:

Warning message:
<anonymous> : <anonymous>: ... may be used in an incorrect context: ‘mean(x[l], ...)’

doForeach <- function(x, ...)
{
    require(doSNOW)
    require(foreach)
    cl <- snow::makeCluster(2, type="MPI")
    on.exit(snow::stopCluster(cl))
    registerDoSNOW(cl)
    do.i <- function(i) lapply(seq_len(length(x)), function(l) mean(x[l], ...))
    foreach(i=seq_len(10)) %dopar% { do.i(i) }
}
x <- rnorm(20)
r <- doForeach(x, trim=1)

我猜这是因为工人/奴隶不再看到...了。正式参数通常通过.export=c("<arg>")作为字符向量传递,但这似乎不适用于...个参数。

在这个例子中处理...参数的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

好的,显然...参数必须通过do.i传递。这是一个更明显(正确运行)的例子:

doForeach <- function(x, ...)
{
    require(doSNOW)
    require(foreach)
    cl <- snow::makeCluster(2, type="MPI")
    on.exit(snow::stopCluster(cl))
    registerDoSNOW(cl)
    do.i <- function(i, ...) lapply(seq_len(length(x)), function(l) max(x[l], ...))
    foreach(i=seq_len(5)) %dopar% { do.i(i, ...) }
}
x <- 1:3
doForeach(x, 1.5)