根据以前的结果并行化for循环

根据以前的结果并行化for循环,r,parallel-processing,R,Parallel Processing,我刚刚开始使用包parallel和foreach()函数。因此,这个问题将是相当愚蠢的。这是我要完成的任务: 将函数应用于对象t 在下一次迭代中使用结果 一个简单的例子是: newFunc<-function(){ test[i+1] <<- sqrt(test[i]) } test <- c(1,rep(NA, 10)) foreach(i=1:11, .combine='rbind', .export='test')%do% newFunc() newF

我刚刚开始使用包
parallel
foreach()
函数。因此,这个问题将是相当愚蠢的。这是我要完成的任务:

  • 将函数应用于对象
    t
  • 在下一次迭代中使用结果
  • 一个简单的例子是:

    newFunc<-function(){
        test[i+1] <<- sqrt(test[i])
    }
    
    test <- c(1,rep(NA, 10))
    
    foreach(i=1:11, .combine='rbind', .export='test')%do% newFunc()
    

    newFunc确实,提出的迭代不是并行运行的,而是

    test = numeric(11); test[] = 2
    test^(1/2^(0:10))
    
    是您感兴趣的解决方案。这很容易并行化(尽管不必要,因为计算已经矢量化了)

    fun = function(i, test)
        test[i] ^ (1 / 2^(i - 1))
    unlist(mclapply(seq_along(test), fun, test))
    

    对于并行计算,
    fun
    不应该更新非局部变量(就像你对
    所做的那样,我不明白。如果迭代的每一步都依赖于前一步,你就不能并行进行。好吧,我想这已经回答了我的问题!thx
    
    fun = function(i, test)
        test[i] ^ (1 / 2^(i - 1))
    unlist(mclapply(seq_along(test), fun, test))