代码之家  ›  专栏  ›  技术社区  ›  Actuary_Greg

如何将许多变量和函数从全局环境导出到foreach循环?

  •  5
  • Actuary_Greg  · 技术社区  · 7 年前

      num.cores <- detectCores()-1
      cluztrr <- makeCluster(num.cores)
      registerDoParallel(cl = cluztrr)
    
      sim.result.list <- foreach(r = 1:simulations, 
          .combine = list,
          .multicombine = TRUE, 
          ) %dopar% {
    
              #...tons of calculations using many variables...
    
              list(vals1,
                   vals2,
                   vals3)
      }
     stopCluster(cluztrr)
    

    是否有必要使用。使用字符向量导出 我使用的变量和函数?执行时间会很慢吗?

    2 回复  |  直到 7 年前
        1
  •  12
  •   F. Privé    7 年前

    如果foreach循环位于全局环境中,则应自动导出变量。如果没有,您可以使用 .export = ls(globalenv()) .GlobalEnv ).

    对于来自其他软件包的函数,您只需要使用语法 package::function

        2
  •  11
  •   HenrikB    7 年前

    “如果[…]在 全球的 环境“部分 F. Privé reply 在这里非常重要。在这种情况下,foreach框架将仅识别全局变量。它会的 foreach() 调用在函数内完成。

    但是,如果您使用 doFuture

    library("doFuture")
    registerDoFuture()
    plan(cluster, workers = cl)
    

    这是需要的 future .export ,则您的代码只能与 doFuture 没有其他后端。这是作为开发人员需要做出的决定。