R 语言 for循环 与 foreach for的多个条件同步循环问题

foreach 耗时3.93秒
for耗时11.61秒

# 我写成function形式了
library(foreach)  #for循环的提速包
library(doParallel)
#于Window的i5或i7 处理器,获得实际的物理核心数量
detectCores(logical = F)
detectCores()
cl<- makeCluster(6)      

registerDoParallel(cl)

start<-Sys.time()
funlast <- function(xxx){
  xx=xxx
  FUN <- function(x,y){
    return(round(sum(x,y),0))
  }
  foreach(.combine = rbind,n = 1:20000) %dopar% FUN(n,n+1)
}     #rbind cbind 默认list
a=funlast(1) 
end<-Sys.time();runningtime<-end-start;cat(runningtime) 
#耗时3.93秒
stopCluster(cl) #终止并行运算


#传统for循环写的
start<-Sys.time()
funlast2=function(x){
  xx=x
  df <- data.frame()
  for (n in 1:20000) {
      df[n,1]=sum(n,n+1)
  }
  return(df)
}
a2=funlast2(1)
end<-Sys.time();runningtime<-end-start;cat(runningtime) 
#耗时11.61秒

#检查结果一致
table(a%in%a2$V1)

R语言的for循环不能多个条件同步循环

for (n in n2) {
for (m in m2) {

从外向内单个执行,里边循还完整,再往外一层。所有先得到里面循环的最终结果,给外一层。

针对for循环函数的话,怎么让两个条件同步循环呢

目前我只能借用其他函数

df <- data.frame()
for (n in 1:5) {
    for (m in 6:10) { # for循环是先循环里面的
      df[n,1]=sum(n,m)
    }
}
df

# 用foreach 能实现同步循环
library(foreach) 
foreach(.combine = rbind,n = 1:5, m = 6:10) %do% sum(n,m) 

# 用purrr
purrr::map2_dbl( 1:5,6:10, ~.x+.y)

R 语言 for循环 与 foreach for的多个条件同步循环问题_第1张图片

你可能感兴趣的