编写代码:启动R会话,运行R脚本,终止会话,重复

时间:2013-04-05 15:21:19

标签: java r terminal

我正在寻找一种简单的“设置并忘记它”的方式,无论是作为终端中的单个参数字符串还是简单的Java程序,都可以实现以下自动化:

1)开始R会话

2)告诉R来源.R文件包含冗长的并行模拟代码

3)完成后终止R会话

4)开始新的R会话

5)告诉R来源其他.R文件

6)完成后终止R会话

7)起泡,冲洗,重复

我的.R脚本总共需要几天才能运行,在此期间我将离开城镇而无法检查它们,如果我在同一个会话中运行它们,我就没有办法避免最大化我的可用RAM。

谢谢!

编辑:我在Ubuntu 12.04 LTS上运行R 2.15.3,内存为16GB

3 个答案:

答案 0 :(得分:4)

使用Rscript处理启动和终止R会话的过程。所以写你的脚本就像这样调用它们:

Rscript script_1.R
Rscript script_2.R
...
Rscript script_Inf.R

留下第2点和第5点......这很简单:

source('/home/sc_evans/script_abc.R')

......在任何脚本的头部。

每个脚本都将获得自己的R会话,该会话将在完成时终止。将这些命令放在批处理脚本中并运行它。


修改

如果我自己这样做,我会忘记使用单独的脚本。只要您正确管理内存,运行单个进程就可以正常运行。将您的流程划分为适当的功能:

massive_process_1 <- function() {
  x <- do_something()
  saveRDS(x, '/home/sc_evans/results/first_result.rds')      
}

massive_process_2 <- function() {
  x <- do_something()
  saveRDS(x, '/home/sc_evans/results/second_result.rds')      
}

massive_process_1()
massive_process_2()

等等。下一个函数在完成第一个函数之前不会运行,并且您的对象应该在函数中死亡,因此您不应该耗尽内存。

答案 1 :(得分:1)

您可以查看此解决方案http://www.rforge.net/JRI

答案 2 :(得分:0)

如果我们将较长的R脚本放入循环并将所有重复的代码段放入循环,则不需要启动和终止R会话的过程。无需启动会话,只需执行以下前三个步骤:

  1. 使用write.csv方法[文件写入]保存您的结果 Rscripts。

  2. 使用Sys.time(seconds)来延迟或缩短时间 使用“基本”软件包的秒数

  3. 通过使用“ mise”清除控制台和无花果工作区 这是释放对象空间的更重要的包 已经执行的脚本。

  4. 我们还可以“ beepr”打包声音method:beep(3)

此后,我更长的脚本执行不会终止 希望对您有帮助