使用 forerach 进行并行计算的意外结果

问题描述

我想在循环中每 5 次迭代后打印一条消息。这在基本 R 循环中工作,如下所示:

vec = c() # empty vector
for (i in 1:100) {
        
        s = sqrt(i)
        vec = c(vec,s)
        if (i %% 5 == 0) {
                print(paste0("Iteration number: ",i," finished running"))
        }
        
}

我希望能够使用 forerach 的并行计算来做同样的事情。到目前为止,我已经完成了以下工作:

vec = c() # empty vector
library(doParallel); library(foreach)
ncores = detectCores() # number of cores in my computer
registerDoParallel(ncores)
foreach (i = 1:100) %dopar% {
        
        s = sqrt(i)
        vec = c(vec," finished running"))
        }
        
}
stopImplicitCluster()

然而,它并没有按照我想要的方式工作。出于某种原因,它还以“类似列表”的格式打印 NULL。如何从 forerach 方法中的基本 R 循环获得相同的结果?

解决方法

如果严格不需要打印在每个 5 的倍数上的消息,以下将创建两个相同的向量。
请注意,我事先创建了 from addict import Dict mapping = Dict() mapping.a.b.c.d.e = 2 print(mapping) # {'a': {'b': {'c': {'d': {'e': 2}}}}} ,并在循环中使用了 SELECT em.asin,em.category FROM `my_proj.amazon_data.electronics_meta` as em WHERE exists ( select * from unnest(category) as sub_cat where sub_cat IN ('Television & Video','Televisions','Television & Video') ) and not exists ( select * from unnest(category) as sub_cat where sub_cat IN ( 'DVD Players & Recorders','Projection Screens','VCRs','Blu-ray Players','Blu-ray Players & Recorders' ) )

vec