从命令行运行R脚本

Sai*_*ait 448 command-line r

我有一个文件,名为a.r,它有一个chmod755,

sayHello <- function(){
   print('hello')
}

sayHello()
Run Code Online (Sandbox Code Playgroud)

我如何通过命令行运行它?

Das*_*son 630

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

Rscript a.R
Run Code Online (Sandbox Code Playgroud)

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

R CMD BATCH a.R
# Check the output
cat a.Rout
Run Code Online (Sandbox Code Playgroud)

如果您真的想使用methods调用脚本的方式,可以./a.R在脚本顶部添加一个适当的

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()
Run Code Online (Sandbox Code Playgroud)

我还要注意,如果你在*unix系统上运行,那么有一个有用的小型软件包可以为R提供简单的命令行管道.

  • 没有#!您的命令行尝试使用解释命令的相同解释器将其作为命令行脚本运行.它不知道它应该是R,即使文件以.R或.r后缀结尾.#!告诉命令行文件中包含哪种语言. (26认同)
  • 多年来我在这里发现了一些问题,并且能够引用littler和Rscript.最重要的是告诉人们,正如你所做的那样,"R CMD BATCH"非常糟糕.除了那个...... (4认同)
  • 我应该添加有关rscript未加载方法包的注释 (2认同)

bio*_*man 95

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

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. 
Run Code Online (Sandbox Code Playgroud)

  • 要运行命令,您还可以在终端中使用`Rscript -e"getwd()"`.Rscript只会打印命令输出而不是完整的R启动消息. (5认同)
  • 感谢您预测我的问题!我还需要一件事:`R -e'install.packages("package",repos ="http://cran.us.r-project.org")'` (2认同)
  • 一个应该使用`R -r'options(warn = 2); 安装...”以中止执行并在安装失败的情况下获得非零错误代码。否则,任何“ install.packages”错误都只是警告。 (2认同)

B.K*_*cis 36

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

R < scriptName.R --no-save  
Run Code Online (Sandbox Code Playgroud)

或者--save.

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


小智 21

您需要?Rscript命令从终端运行R脚本.

查看http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

## 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()
Run Code Online (Sandbox Code Playgroud)

  • 我没有得到它,我将用这个代码做什么? (2认同)

Shi*_*Guo 10

如何通过多个命令使用knitr和rmarkdown在命令中运行Rmd,然后将HTML文件上载到RPub

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

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

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,跳过加载库会更简单;R -e'markdown :: rpubsUpload(“ normalDev”,“ NormalDevconJuly.html”)'`` (2认同)

Seb*_*ler 5

在 *Unix 系统中使用 Rscript 的另一种方法是Process Substitution

Rscript <(zcat a.r)
# [1] "hello"
Run Code Online (Sandbox Code Playgroud)

这显然与接受的答案相同,但这允许您操作和运行文件,而无需保存命令行的功能,例如:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)