使用R脚本从命令行执行简单绘图非常方便。但是,从bash脚本运行R并不方便。理想可能是
#!/path/to/R
...
或
#!/usr/bin/env R
...
但我无法完成其中任何一项工作。
另一种选择是将脚本完全保留在R中,例如script.R
,并使用R --file=script.R
或类似内容调用它。但是,有时脚本会依赖于模糊的命令行开关,此时代码的一部分存在于脚本之外。示例:通过本地.Rprofile从bash中将事物偷偷带入R中,然后所需的开关--vanilla
暗示--no-init-file
除外。
另一个选项是用于存储R标志的bash脚本,并且可以无痛地执行,然后调用R脚本。问题是,这意味着单个程序被分成两个文件,现在必须保持同步,一起转移到新机器等。
我目前最鄙视的选项是将R嵌入到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在一个或另一个上没有失败的可能性,并且让我的心脏受到伤害。
我错过了一些更好的方法吗?
答案 0 :(得分:123)
script.r
的内容:
#!/usr/bin/Rscript
cat("Hello")
从命令行调用:
./script.r
答案 1 :(得分:16)
试试littler。 littler
为GNU R提供hash-bang(即以#!/ some / path开头的脚本)功能,以及简单的命令行和管道使用。
答案 2 :(得分:10)
Miguel Sanchez的回应是应该的样子。执行Rscript的另一种方法可能是'env'命令来运行系统范围的RScript。
#!/usr/bin/env Rscript
答案 3 :(得分:9)
#!/path/to/R
无效,因为R本身就是一个脚本,所以execve
不满意。
我使用R --slave -f script
答案 4 :(得分:6)
如果您对解析R脚本的命令行参数感兴趣,请尝试与版本2.5.x中的R捆绑在一起的RScript
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html
答案 5 :(得分:5)
这有效,
#!/usr/bin/Rscript
但我不知道如果您的计算机上安装了多于一个版本的R,会发生什么。
如果你这样做
#!/usr/bin/env Rscript
它告诉解释者只使用你路径上首先出现的任何R。
答案 6 :(得分:4)
只需添加一条注释即可添加到此帖子中。 R
的更高版本似乎有点埋没Rscript
。对于2015年1月下载的OSX上的R 3.1.2-1,我在
Rscript
/sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript
因此,我需要在脚本的顶部使用以下内容,而不是#! /sw/bin/Rscript
之类的内容。
#! /sw/Library/Frameworks/R.framework/Versions/3.1/Resources/bin/Rscript
locate Rscript
可能会对您有所帮助。
答案 7 :(得分:2)
如果您用来执行脚本的程序需要参数,您可以将它们放在#的末尾!行:
#!/usr/bin/R --random --switches --f
不知道R,我无法正常测试,但这似乎有效:
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:~$
答案 8 :(得分:0)
您可能想要使用python的rpy2模块。但是,“正确”的方法是使用R 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
注意:您需要尝试使用--vanilla和其他选项来删除所有启动程序。
答案 9 :(得分:0)
尝试使用smallR在命令行中编写快速R脚本:
http://code.google.com/p/simple-r/
(目录中的r
命令)
使用smallR从命令行绘图将如下所示:
r -p file.txt
答案 10 :(得分:-1)
以下适用于我在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 制作此可执行文件。
然后在你的脚本文件中:
#!runr
# some R commands
x = 1
x
注意#! runr行可能需要包含runr的完整路径,具体取决于您使用命令的方式,PATH变量的设置方式等。
不漂亮,但似乎确实有效!
答案 11 :(得分:-1)
您是否知道可以使用浏览器在服务器上使用RStudio?