以下是一个简单的例子,展示了如何使用parallel包的mclapply函数来并行处理一个任务列表: # 加载parallel包 library(parallel) # 定义一个函数,这个函数将在并行处理中使用 function(x) { # 这里可以是任何你想并行处理的任务 return(x^2) } # 创建一个要处理的数据列表 my_data <- list(1, 2, 3, 4, 5) # 使用mclapply 函数进行并行处理 # mc.cores参数定义了要使用的核心数 results <- mclapply(my_data, my_function, mc.cores = 2) # 打印结果 print 需要注意的是,mclapply函数在Windows系统上可能无法工作,因为它依赖于Unix的fork系统调用。
nu-regression",kernel="linear",nu=nus,scale=F) model } #Execute In a parallel way the SVM ####Windows没有办法用mclapply 开多核的,可以用parlapply library(parallel) if(Sys.info()['sysname'] == 'Windows') { out <- mclapply(1: svn_itor, res, mc.cores=1) }else { out <- mclapply(1:svn_itor, res, mc.cores=svn_itor) } # 运行了Support "linear",nu=nus,scale=F) model } if(Sys.info()['sysname'] == 'Windows') out <- parallel::mclapply (1:svn_itor, res, mc.cores=1) else out <- parallel::mclapply(1:svn_itor, res, mc.cores=svn_itor)
老办法,先使用traceback看一下报错的调用栈: traceback() 11: FUN(X[[i]], ...) 10: lapply(X = X, FUN = FUN, ...) 9: mclapply function (models, newdata = NULL, response_type = "response", cores = 1) { res_list <- mclapply
请确保你的计算任务是可以并行化的,并且注意到在Windows系统上,mclapply可能不如在Unix-like系统(如Linux或Mac OS X)上有效。
cl <- makeCluster(8) ... on.exit(stopCluster(cl)) # 如出错也退出,另一个常见用法,配合par()使用 Linux和macOS下的并行代码 使用mclapply
F) model } #Execute In a parallel way the SVM if(Sys.info()['sysname'] == 'Windows') { out <- mclapply (1:svn_itor, res, mc.cores=1) }else { out <- mclapply(1:svn_itor, res, mc.cores=svn_itor) } # 运行了Support
但比较遗憾的是调用parallel包的时候不能同时使用data.table数据结构,因为data.table也是多线程的,它其实也是通过调用parallel::mclapply和foreach包里的函数实现快速处理
很不幸的是这个功能在Windows系统平台不支持: Error in parallel::mclapply(1:ncol(norm.mat), dlm.sm, mc.cores = n.cores) :
do.call(rbind, mcmc[[j]]) : second argument must be a list In addition: Warning message: In parallel::mclapply
stim,"_.RData")) return(NULL) } # 设置并行计算 num_cores <- 2 #detectCores() - 1 # 使用所有可用核心的 n-1 mclapply
Warning message: In mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed, :