从命令行运行R脚本

Run R script from command line

我有一个文件,叫做a.r,它的chmod是755,

1
2
3
4
5
sayHello <- function(){
   print('hello')
}

sayHello()

如何通过命令行运行这个?


如果要将输出打印到终端,最好使用rscript

1
Rscript a.R

注意,当使用R CMD BATCH a.R时,将创建一个名为a.rout的新文件,而不是将输出重定向到标准输出并显示在终端上。

1
2
3
R CMD BATCH a.R
# Check the output
cat a.Rout

关于使用rscript,还有一点需要注意,默认情况下它不会加载methods包,这会导致混淆。因此,如果您依赖于方法提供的任何东西,那么您将希望在脚本中显式地加载它。

如果您真的想使用./a.R方法调用脚本,可以在脚本顶部添加适当的#!

1
2
3
4
5
6
#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

我还将注意到,如果您在一个*Unix系统上运行,那么有一个有用的Littler包,它为R提供了简单的命令行管道。


这并不能直接回答问题。但有人可能会在这里结束,因为他们想从终端运行一行r。例如,如果您只想安装一些丢失的包并退出,那么这个OneLiner非常方便。我经常使用它,当我突然发现我错过了一些包,我想安装到我想要的地方。

1
2
R -e 'install.packages(c("package1","package2"))' # install to default location.
sudo R -e 'install.packages(c("package1","package2"), lib="/usr/local/lib/R/site-library")' # install to location that requires root.


从命令行运行R脚本的另一种方法是:

1
R < scriptName.R --no-save

或与--save一起使用。

另请参见在命令行(终端)上使用R脚本的最佳方法是什么?.


您需要?Rscript命令从终端运行一个r脚本。

查看http://stat.ethz.ch/r-manual/r-devel/library/utils/html/rscript.html

例子

1
2
3
4
5
6
## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res,"try-error")) q(status=1) else q()


如何通过多个命令运行带有knitr和rmarkdown的命令中的rmd,然后将HTML文件上载到rpubs

下面是一个示例:加载两个库并运行r命令

1
2
3
R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'


只是为了文件。有些时候,你需要以sudo的身份运行票据:

1
sudo Rscript path/to/your/file.R


对*Unix系统使用rscript的另一种方法是进程替换。

1
2
Rscript <(zcat a.r)
# [1]"hello"

这显然与接受的答案相同,但这允许您在不保存命令行的电源的情况下操作和运行文件,例如:

1
2
Rscript <(sed s/hello/bye/ a.r)
# [1]"bye"

Rscript -e"Rcode"类似,它也允许在不保存到文件中的情况下运行。因此,它可以与生成R代码的脚本一起使用,例如:

1
2
3
4
Rscript <(echo"head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa