在命令行(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吗?