是否可以并行化以下代码?
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...........
周围,然后是 &
但它是没有给出结果,并且日志文件结果是空的。任何建议/帮助将不胜感激。 TIA。
最佳答案
您可以更改脚本以输出要运行的命令,并将结果输入到 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
可能解释的任何其他内容。输出应该是并行
可以运行的有效命令行。
作为并行
的替代方案,您还可以使用xargs -i
。请参阅this question了解更多信息。
关于r - 如何并行化 bash 中调用 R 脚本的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803194/