r语言并行计算(2)----foreach函数

在建模中想使用并行计算,(1)中谈到并行计算,有个foreach函数,但是其中参数并不详细,这里点击打开链接有详细介绍


foreach {foreach}

    foreach
    Package: 
     foreach
    Version: 
     1.4.3

    Description

    %do% and %dopar% are binary operators that operate on a foreach object and an R expression. The expression, ex, is evaluated multiple times in an environment that is created by the foreach object, and that environment is modified for each evaluation as specified by the foreach object. %do% evaluates the expression sequentially, while %dopar% evalutes it in parallel. The results of evaluating ex are returned as a list by default, but this can be modified by means of the .combine argument.

    Usage

    foreach(..., .combine, .init, .final=NULL, .inorder=TRUE,
           .multicombine=FALSE,
           .maxcombine=if (.multicombine) 100 else 2,
           .errorhandling=c('stop', 'remove', 'pass'),
           .packages=NULL, .export=NULL, .noexport=NULL,
           .verbose=FALSE)
    when(cond)
    e1 %:% e2
    obj %do% ex
    obj %dopar% ex
    times(n)
    

    Arguments

    ...
    one or more arguments that control how  ex is evaluated. Named arguments specify the name and values of variables to be defined in the evaluation environment. An unnamed argument can be used to specify the number of times that  ex should be evaluated. At least one argument must be specified in order to define the number of times  ex should be executed.
    .combine
    function that is used to process the tasks results as they generated. This can be specified as either a function or a non-empty character string naming the function. Specifying 'c' is useful for concatenating the results into a vector, for example. The values 'cbind' and 'rbind' can combine vectors into a matrix. The values '+' and '*' can be used to process numeric data. By default, the results are returned in a list.
    .init
    initial value to pass as the first argument of the  .combine function. This should not be specified unless .combine is also specified.
    .final
    function of one argument that is called to return final result.
    .inorder
    logical flag indicating whether the  .combine function requires the task results to be combined in the same order that they were submitted. If the order is not important, then it setting  .inorder to  FALSEcan give improved performance. The default value is  TRUE.
    .multicombine
    logical flag indicating whether the  .combine function can accept more than two arguments. If an arbitrary .combine function is specified, by default, that function will always be called with two arguments. If it can take more than two arguments, then setting  .multicombine to  TRUE could improve the performance. The default value is  FALSE unless the  .combine function is  cbindrbind, or  c, which are known to take more than two arguments.
    .maxcombine
    maximum number of arguments to pass to the combine function. This is only relevant if  .multicombineis  TRUE.
    .errorhandling
    specifies how a task evalution error should be handled. If the value is "stop", then execution will be stopped via the  stop function if an error occurs. If the value is "remove", the result for that task will not be returned, or passed to the  .combine function. If it is "pass", then the error object generated by task evaluation will be included with the rest of the results. It is assumed that the combine function (if specified) will be able to deal with the error object. The default value is "stop".
    .packages
    character vector of packages that the tasks depend on. If  ex requires a  R package to be loaded, this option can be used to load that package on each of the workers. Ignored when used with  %do%.
    .export
    character vector of variables to export. This can be useful when accessing a variable that isn't defined in the current environment. The default value in  NULL.
    .noexport
    character vector of variables to exclude from exporting. This can be useful to prevent variables from being exported that aren't actually needed, perhaps because the symbol is used in a model formula. The default value in  NULL.
    .verbose
    logical flag enabling verbose messages. This can be very useful for trouble shooting.
    obj
    foreach object used to control the evaluation of  ex.
    e1
    foreach object to merge.
    e2
    foreach object to merge.
    ex
    the  R expression to evaluate.
    cond
    condition to evaluate.
    n
    number of times to evaluate the  R expression.

    Details

    The foreach and %do%/%dopar% operators provide a looping construct that can be viewed as a hybrid of the standard for loop and lapply function. It looks similar to the for loop, and it evaluates an expression, rather than a function (as in lapply), but it's purpose is to return a value (a list, by default), rather than to cause side-effects. This faciliates parallelization, but looks more natural to people that preferfor loops to lapply.

    The %:% operator is the nesting operator, used for creating nested foreach loops. Typevignette("nested") at the R prompt for more details.

    Parallel computation depends upon a parallel backend that must be registered before performing the computation. The parallel backends available will be system-specific, but include doParallel, which uses R's built-in parallel package, doMC, which uses the multicore package, and doSNOW. Each parallel backend has a specific registration function, such as registerDoParallel or registerDoSNOW.

    The times function is a simple convenience function that calls foreach. It is useful for evaluating an Rexpression multiple times when there are no varying arguments. This can be convenient for resampling, for example.

    See Also

    iter

    Examples

    # equivalent to rnorm(3)
    times(3) %do% rnorm(1)
     
    # equivalent to lapply(1:3, sqrt)
    foreach(i=1:3) %do%
      sqrt(i)
     
    # equivalent to colMeans(m)
    m <- matrix(rnorm(9), 3, 3)
    foreach(i=1:ncol(m), .combine=c) %do%
      mean(m[,i])
     
    # normalize the rows of a matrix in parallel, with parenthesis used to
    # force proper operator precedence
    # Need to register a parallel backend before this example will run
    # in parallel
    foreach(i=1:nrow(m), .combine=rbind) %dopar%
      (m[i,] / mean(m[i,]))
     
    # simple (and inefficient) parallel matrix multiply
    library(iterators)
    a <- matrix(1:16, 4, 4)
    b <- t(a)
    foreach(b=iter(b, by='col'), .combine=cbind) %dopar%
      (a %*% b)
     
    # split a data frame by row, and put them back together again without
    # changing anything
    d <- data.frame(x=1:10, y=rnorm(10))
    s <- foreach(d=iter(d, by='row'), .combine=rbind) %dopar% d
    identical(s, d)
     
    # a quick sort function
    qsort <- function(x) {
      n <- length(x)
      if (n == 0) {
        x
      } else {
        p <- sample(n, 1)
        smaller <- foreach(y=x[-p], .combine=c) %:% when(y <= x[p]) %do% y
        larger  <- foreach(y=x[-p], .combine=c) %:% when(y >  x[p]) %do% y
        c(qsort(smaller), x[p], qsort(larger))
      }
    }
    qsort(runif(12))

    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值