【发布时间】:2017-06-13 09:37:25
【问题描述】:
我的代码中有一个 foreach 循环来减少运行时间。我面临的问题是,我没有得到输出中的所有输入记录。下面是代码sn-p。
# my_df has 100 records
library(doMC)
library(foreach)
no_cores <- detectCores()
registerDoMC(no_cores)
# nrow(my_df)=100
output <- foreach(combo = 1:nrow(my_df),.combine=rbind) %dopar%
{
df <- my_df[combo,] #taking 1 row at a time
### do some operations ####
score <- sum(another_df$score1+another_df$score2)
if(score>score_cutoff){
df$score <- score
}else{
df$score <- 0}
df; #rbinding *df* to *output*
}
输出数据框应包含 100 条记录,但我得到的是随机数量的记录(每次少于 100 条)。我已经多次使用foreach,但这是第一次发生这种情况。
有人可以帮我解决这个问题吗? 提前致谢。
【问题讨论】:
-
我假设您正在对
my_df执行计算?你能详细说明一下你的操作是什么吗? -
@Val,我已经编辑了问题中的代码。我所做的只是计算 SCORE 并将该值添加到 df
-
@santhoshverma:你在哪里声明
another_df?在foreach声明之前?another_df的一般格式是什么? 2列data.frame? -
@ChiPak,是的,
another_df是在foreach语句之外创建的。它是data.table格式,它有超过2 列。我想在这里理解的是,如果我们引用foreach语句之外的任何数据,parallel processing或doMc包会有任何问题吗?
标签: r foreach parallel-processing