【问题标题】:How to write an output of multiple simultaneous R script into a single file?如何将多个同时 R 脚本的输出写入单个文件?
【发布时间】:2015-03-04 16:28:36
【问题描述】:

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

#! /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 脚本的两个不同实例尝试同时附加 fnam 文件,看起来可能会出现问题。

有没有人尝试过同步/排序方式,其中同一个 R 脚本的多个实例附加同一个输出文件?

【问题讨论】:

  • 我可能会每次都写入一个单独的文件,然后再整理到一个文件中。
  • 好建议!我会继续关注它:-)

标签: r bash output


【解决方案1】:

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

【讨论】:

  • 好建议!正如 cory 所建议的那样,我工作的不同实例应该将它们的输出写入不同的文件,以后可以合并。
猜你喜欢
  • 2014-11-21
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多