如何在调用 R 脚本的 bash 中并行化嵌套的 for 循环



是否可以并行化以下代码?

for word in $(cat FileNames.txt)
do 
for i in {1..22}
do  
Rscript assoc_test.R...........
done >> log.txt
done 

我一直在尝试并行化它,但到目前为止并不幸运。我尝试在Rscript assoc_test.R...........周围放置(),然后是&,但它没有给出结果,日志文件结果是空的。任何建议/帮助将不胜感激。蒂亚。

您可以更改脚本以输出要运行的命令,并将结果馈送到 GNU 并行中:

for word in $(cat FileNames.txt)
do 
for i in {1..22}
do  
echo Rscript assoc_test.R........... > log.$word.$i
done
done | parallel -j 4

一些细节:

  • parallel -j 4将一次保持 4 个作业运行 - 将 4 替换为要使用的 CPU 数量。
  • 请注意,我将输出重定向到log.$word.$i并使用>转义重定向运算符>。我需要测试并确保它有效,但关键是,由于您要并行,因此您不想将所有输出混在一起。
  • 确保你逃脱了echo可能解释的任何其他内容。输出应该是parallel可以运行的有效命令行。

作为parallel的替代方法,也可以使用xargs -i。有关详细信息,请参阅此问题。

GNU Parallel 用于替换循环,因此双循环可以替换为:

parallel Rscript assoc_test.R... > log.{1}.{2} :::: FileNames.txt ::: {1..22} > log.txt 

最新更新