提问



我有一个名为a.r的文件,它的chmod为755,


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

sayHello()


如何通过命令行运行?

最佳参考


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


Rscript a.R


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


R CMD BATCH a.R
# Check the output
cat a.Rout


如果你真的想使用./a.R调用脚本的方式,你可以在脚本的顶部添加一个合适的#!


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

sayHello()


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

其它参考1


这不直接回答这个问题。但是有人可能会在这里结束,因为他们想从终端运行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. 

其它参考2


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


R < scriptName.R --no-save  


--save


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

其它参考3


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


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





## 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()

其它参考4


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


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


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

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

其它参考5


仅供参考。您需要以sudo的形式运行脚本:


sudo Rscript path/to/your/file.R

其它参考6


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


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


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


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


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