如何使用foreach在并行处理中使用共享数据帧

如何使用foreach在并行处理中使用共享数据帧,r,parallel-foreach,R,Parallel Foreach,我想使用foreach包来并行for循环: 原始代码如下所示: data_df=data.frame(...) # the data frame where original data stored result_df=data.frame(...) # the data frame where result data to be stored for(i in 1:10) { a=data_df[i,]$a b=data_df[i,]$b sum_result=

我想使用foreach包来并行for循环:

原始代码如下所示:

data_df=data.frame(...) # the data frame where original data stored
result_df=data.frame(...) # the data frame where result data to be stored

for(i in 1:10)
{
     a=data_df[i,]$a
     b=data_df[i,]$b
     sum_result=a+b
     sub_result=a-b
     result_df[i,]$sum_result=sum_result
     result_df[i,]$sub_result=sub_result
}
我使用索引I作为行号,从数据帧获取数据并将数据存储回另一个数据帧

但是,如果我改变:

for(i in 1:10)

它确实运行得非常快,但结果似乎只存储在数据帧中的一列中。如何将两列保存在一起

我应该如何编写共享数据帧,以便并行

数据_df的示例数据

a   b
1   1
2   4
4   8
9   6
2   3

您应该使用
.combine=rbind

result = foreach(i = 1:5, .combine = rbind) %dopar% {
  data.frame(x = runif(40), i = i)
}

> head(result)
          x i
1 0.2777559 1
2 0.2126995 1
3 0.2847905 1
4 0.8950941 1
5 0.4462353 1
6 0.7799849 1
您可以这样做:

require("doParallel")
require("foreach")
registerDoParallel(cores=detectCores())
n <- nrow(data_df)
res <- foreach(i=1:n, .combine=rbind) %dopar% {
    data_df[i,]$a + data_df[i,]$b
}

data_df

  # a  b
# 1 1  6
# 2 2  7
# 3 3  8
# 4 4  9
# 5 5 10

res
         # [,1]
# result.1    7
# result.2    9
# result.3   11
# result.4   13
# result.5   15
require(“双平行”)
要求(“foreach”)
registerDoParallel(核心=检测核心()

n在并行化中,每个子进程获得一个新的环境。因此,最后您需要返回data.frame,以便父进程可以将每个子进程的输出存储在一起。还需要添加一个示例数据示例供我们使用!谢谢你指出,我补充道that@lserlohn我能回答你的问题吗?如果没有,请加上。谢谢大家。我发现我的问题更复杂。如何将两列保存在一起?如果我使用rbind选项,我只能保存一个。谢谢,在仔细检查代码之后,我发现我的问题是如何在一个数据帧中输出两列结果。你能看一下新的密码吗?谢谢。我修改了我的问题,你能帮我回答一下如何返回带有顺序赋值的数据帧吗
require("doParallel")
require("foreach")
registerDoParallel(cores=detectCores())
n <- nrow(data_df)
res <- foreach(i=1:n, .combine=rbind) %dopar% {
    data_df[i,]$a + data_df[i,]$b
}

data_df

  # a  b
# 1 1  6
# 2 2  7
# 3 3  8
# 4 4  9
# 5 5 10

res
         # [,1]
# result.1    7
# result.2    9
# result.3   11
# result.4   13
# result.5   15
data_df <- structure(list(a = 1:5, b = 6:10), .Names = c("a", "b"), row.names = c(NA, 
-5L), class = "data.frame")