我在R中做了以下连续的小例子:
all_list
all_list[1]
all_list[2]
all_list[3]
all_list[4]
all_list[5]
find
result
index
current_Intervall
current_number
while(current_number <= 5000000){
for(i in 1:length(find[[1]])){
if(current_number == find[[1]][i]){
result[[index]]
index
break
}
}
current_number
last
if(current_number > all_list[[current_Intervall]][last]){
if(current_Intervall == length(all_list)){
break
}else{
current_Intervall
current_number
}
}
print(current_number)
}
我想让这个代码与Windows并行 . 我想到了doParallel包和foreach循环,因为我没有找到支持并行while循环的包 . 现在我试过这个:
library(doParallel)
all_list
all_list[1]
all_list[2]
all_list[3]
all_list[4]
all_list[5]
find
result
index
current_Intervall
current_number
no_cores
cl
registerDoParallel(cl)
print(current_number)
foreach(current_number=1:5000000) %dopar% {
for(i in 1:length(find[[1]])){
if(current_number == find[[1]][i]){
result[[index]]
index
break
}
}
# current_number
last
if(current_number > all_list[[current_Intervall]][last]){
if(current_Intervall == length(all_list)){
break
}else{
current_Intervall
current_number
}
}
print(current_number)
}
stopCluster(cl)
但是打印输出不会打印任何内容,大约2分钟后循环不会终止 . 但是连续的例子在几秒钟之后就成立了 . 我觉得有些不对劲 .
另一个问题是:是否有可能在foreach循环中重新定义计数器编号?在上面的while循环中,我可以设置计数器"current_number"仲裁 . 但我认为在R中,for循环不允许重新定义计数器号,对吗?是否有更好的包或替代循环来并行化第一个例子?
最好的问候,布莱恩