问题描述
我想在循环中每 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