在命令行(terminal)上使用R脚本的最好方法是什么?

使用R脚本从命令行执行简单的绘图非常方便。 但是,从bash脚本运行R并不方便。 理想可能是类似的东西

#!/path/to/R ... 

要么

 #!/usr/bin/env R ... 

但是我还没能做出这些工作。

另一个select是将脚本纯粹保存在R中,例如script.R ,并用R --file=script.R或类似的方法调用它。 但是,有时脚本将依赖于模糊的命令行开关,在这一点上代码的一部分存在于脚本之外。 例如:通过本地.Rprofile从bash偷东西到R中,所需的开关就是一切--vanilla除了--no-init-file之外,所有的开关都是--vanilla

另一个选项是一个bash脚本来存储R标志并且可以无痛地执行,然后调用R脚本。 问题是,这意味着一个程序只是分成两个文件,现在必须保持同步,一起转移到新机器上等等。

我目前最不喜欢的选项是将Rembedded到bash脚本中:

 #!/bin/bash ... # usage message to catch bad input without invoking R ... # any bash pre-processing of input ... # etc R --random-flags <<RSCRIPT # R code goes here RSCRIPT 

一切都在一个单一的文件。 它是可执行的,可以轻松处理参数。 问题在于,将bash和R结合起来,几乎消除了任何一个IDE都不能失败的可能性,并且使我的心脏受到伤害。

有没有更好的方法我错过了?

script.r内容:

 #!/usr/bin/Rscript cat("Hello") 

从命令行调用:

 ./script.r 

试试小费 。 littler为GNU R提供了hash-bang(即以#!/ some / path开头的脚本)function,以及简单的命令行和pipe道使用。

#!/path/to/R将不起作用,因为R本身就是一个脚本,所以execve不高兴。

我使用R --slave -f script

米格尔·桑切斯的回应是应该的。 执行Rscript的另一种方式可以是运行系统范围RScript的'env'命令。

 #!/usr/bin/env Rscript 

如果您有兴趣将命令行参数parsing为R脚本,请尝试从版本2.5.x起与R捆绑在一起的RScript

http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html

这工作,

 #!/usr/bin/Rscript 

但是我不知道如果你的机器上安装了超过1个版本的R,会发生什么情况。

如果你这样做

 #!/usr/bin/env Rscript 

它告诉解释者只要使用R先出现在你的path上。

只是一个笔记添加到这个职位。 R后期版本似乎已经埋葬了Rscript 。 对于2015年1月下载的OSX上的R Rscript ,我发现了Rscript

 /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript 

所以,而不是像#! /sw/bin/Rscript #! /sw/bin/Rscript ,我需要在脚本的顶部使用以下内容。

 #! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript 

locate Rscript可能对您有所帮助。

如果你用来执行脚本的程序需要参数,你可以把它们放在#!的末尾。 线:

 #!/usr/bin/R --random --switches --f 

不知道R,我无法正确testing,但这似乎工作:

 axa@artemis:~$ cat r.test #!/usr/bin/R -q -f error axa@artemis:~$ ./r.test > #!/usr/bin/R -q -f > error Error: object "error" not found Execution halted axa@artemis:~$ 

你可能想使用python的rpy2模块。 然而,“RIM CMD BATCH”的“正确”方式就是这样。 你可以修改这个来写入STDOUT,但是默认是写入一个.Rout文件。 看下面的例子:

 [ramanujan:~]$cat foo.R print(rnorm(10)) [ramanujan:~]$R CMD BATCH foo.R [ramanujan:~]$cat foo.Rout R version 2.7.2 (2008-08-25) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] ~/.Rprofile loaded. Welcome at Fri Apr 17 13:33:17 2009 > print(rnorm(10)) [1] 1.5891276 1.1219071 -0.6110963 0.1579430 -0.3104579 1.0072677 -0.1303165 0.6998849 1.9918643 -1.2390156 > Goodbye at Fri Apr 17 13:33:17 2009 > proc.time() user system elapsed 0.614 0.050 0.721 

注意:你会想尝试 – 和其他选项来删除所有的启动cruft。

尝试smallR在命令行中编写快速R脚本:

http://code.google.com/p/simple-r/

(目录中的r命令)

使用smallR从命令行绘制如下所示:

 r -p file.txt 

下面的代码在Windows上使用MSYS bash – 我的Linux上没有R,所以不能在这里试试。 您需要两个文件 – 第一个称为runr的文件参数执行R.

 # this is runr # following is path to R on my Windows machine # plus any R params you need c:/r/bin/r --file=$1 

你需要使用chmod + x runr来创build这个可执行文件。

然后在你的脚本文件中:

 #!runr # some R commands x = 1 x 

注意#! runr行可能需要包含runr的完整path,具体取决于你如何使用命令,你的PATHvariables是如何设置的等等

不漂亮,但它似乎工作!

你知道你可以使用你的浏览器在服务器上使用RStudio吗?

http://www.rstudio.com/products/rstudio/download-server/

Interesting Posts