如何将多个同步R脚本的输出写入单个文件?

时间:2015-03-04 16:28:37

标签: r bash output

对于我的模拟,我写了一个小循环来运行" my_script.R"的多个(n = 20)个实例。同时:

#! /bin/bash 
declare -i i=1 n=20

while [ $i -le $n ]; do
echo "#!/bin/bash --login" >my.qsub.${i} 
echo "#PBS -l nodes=1:ppn=1" >> mu.qsub.${i} 
echo "#PBS -l mem=2GB" >> my.qsub.${i} 
echo "cd /~path to my wd/"   >> my.qsub.${i} 
echo "module load  R/3.0.1" >> my.qsub.${i} 
echo -n 'R CMD BATCH --vanilla --slave --no-timing my_script.R ' >> my.qsub.${i} 
echo "" >> my.qsub.${i} 
qsub -l walltime=03:59:00 my.qsub.${i} 
sleep 2
let i+=1
done

在" my_script.R"中,我有一个for循环(n = 1,...,B),它将结果写入" fnam"每次迭代结束时的.txt文件:

cat(file=fnam, append=TRUE, Results[n,], "\n")

一切正常,但如果同一个R scrip的两个不同实例试图同时附加fnam文件,则看起来可能会出现问题。

是否有人尝试同步/订购方式,其中同一R脚本的多个实例附加相同的输出文件?

1 个答案:

答案 0 :(得分:0)

他们的工作需要写入不同的文件,然后你必须将它们合并。您可以使用qsub -t 20 -sync y一次提交所有作业,如“阵列作业”。这将创造20个相同的工作,并在返回之前等待所有工作完成。每个作业都可以通过环境变量SGE_TASK_ID为自己获取唯一标识符,从中可以创建唯一的文件名。 sync选项将使qsub等到它们完成后再返回,然后您可以将所有文件连接在一起。