并行和foreach包的排列错误;任务1失败-“;找不到“;错误

并行和foreach包的排列错误;任务1失败-“;找不到“;错误,r,permutation,R,Permutation,我不知道如何解决这个问题。我已经尝试在这里添加.packages=“foreach”,但无法使其工作。非常感谢您的帮助 #################### install.packages("doParallel") install.packages("doSNOW") install.packages("doParallel") install.packages("doMPI") install.packages("tidyverse") # Load packages ------

我不知道如何解决这个问题。我已经尝试在这里添加
.packages=“foreach”
,但无法使其工作。非常感谢您的帮助

####################
install.packages("doParallel")
install.packages("doSNOW")
install.packages("doParallel") 
install.packages("doMPI")
install.packages("tidyverse")

# Load packages -----------------------------------------------------------
rm(list = ls())
library(tidyverse)
library(foreach)
library(doSNOW)
library(doMPI)
library(doParallel)
registerDoParallel()

# Single iteration function -------------------------------------------------------------
one_iteration <- function(snps, estuaries) {
  sim_snps <- matrix(data = NA, nrow = snps, ncol = estuaries) %>% 
    as.data.frame(.)
  for (i in 1:snps) {
    sim_snps[i, ] <- sample(x = c(0,0,0, 1,1,1), size = estuaries, replace = F)
  }
  nbig <- rowSums(sim_snps)

  c(sum(nbig == 3), sum(nbig == 2), sum(nbig == 1), sum(nbig == 0))
}

# Permutations function ---------------------------------------------------
doNullPermutations <- function(nit, snps, estuaries) {
  start <- summary(proc.time())[3] # get time at start of function
  x <- foreach(iteration = 1:nit, # do 100 iterations
               .combine = rbind) %dopar% one_iteration(snps, estuaries)
  print(summary(proc.time())[3] - start) # print time elapse (time at end minus the start)
  return(x)
}

# 3 estuaries -------------------------------------------------------------
perms_res_3est_10kperm <- doNullPermutations(1, snps = 20083, estuaries = 3)
**Error in one_iteration(snps, estuaries) : 
  task 1 failed - "could not find function "one_iteration""
Called from: e$fun(obj, substitute(ex), parent.frame(), e$data)**
####################
安装软件包(“doParallel”)
install.packages(“doSNOW”)
安装软件包(“doParallel”)
install.packages(“doMPI”)
安装程序包(“tidyverse”)
#加载包-----------------------------------------------------------
rm(list=ls())
图书馆(tidyverse)
图书馆(foreach)
图书馆(doSNOW)
图书馆(doMPI)
图书馆(双平行)
registerDoParallel()
#单迭代函数-------------------------------------------------------------

一次迭代下面的代码应该可以工作。出现此错误的原因是foreach函数在新会话中创建了新的worker,而在这些会话中,不会导出主会话中的函数和包。因此请注意
.export
参数和
.packages
参数

# Permutations function ---------------------------------------------------
doNullPermutations <- function(nit, snps, estuaries) {
    x <- foreach(iteration = 1:3, # do 100 iterations
               .combine = rbind,
               .export = ls(globalenv()),
               .packages = 'tidyverse') %dopar% one_iteration(snps, estuaries)
    return(x)
}

perms_res_3est_10kperm <- doNullPermutations(1, snps = 20083, estuaries = 3)
#置换函数---------------------------------------------------

doNullPermutations下面的代码应该可以工作。出现此错误的原因是foreach函数在新会话中创建了新的worker,而在这些会话中,不会导出主会话中的函数和包。因此请注意
.export
参数和
.packages
参数

# Permutations function ---------------------------------------------------
doNullPermutations <- function(nit, snps, estuaries) {
    x <- foreach(iteration = 1:3, # do 100 iterations
               .combine = rbind,
               .export = ls(globalenv()),
               .packages = 'tidyverse') %dopar% one_iteration(snps, estuaries)
    return(x)
}

perms_res_3est_10kperm <- doNullPermutations(1, snps = 20083, estuaries = 3)
#置换函数---------------------------------------------------
多努尔置换