我有一个名为a.r
的文件,其chmod
为755,
sayHello <- function(){
print('hello')
}
sayHello()
如何通过命令行运行?
答案 0 :(得分:590)
如果要将输出打印到终端,最好使用Rscript
Rscript a.R
请注意,使用R CMD BATCH a.R
而不是将输出重定向到标准输出并在终端上显示时,将创建一个名为a.Rout的新文件。
R CMD BATCH a.R
# Check the output
cat a.Rout
关于使用Rscript的另一个注意事项是它默认不加载methods
包,这可能会导致混淆。因此,如果您依赖于方法提供的任何内容,您将需要在脚本中明确加载它。
如果您真的想使用./a.R
方式调用脚本,可以在脚本顶部添加适当的#!
#!/usr/bin/env Rscript
sayHello <- function(){
print('hello')
}
sayHello()
我还要注意,如果你在* unix系统上运行,那么有一个有用的littler包可以为R提供简单的命令行管道。
答案 1 :(得分:86)
这不直接回答问题。但有人可能会在这里结束,因为他们想从终端运行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 :(得分:32)
答案 3 :(得分:17)
您需要?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()
答案 4 :(得分:9)
如何使用knitr和rmarkdown通过多个命令在命令中运行Rmd,然后将HTML文件上传到RPubs
这是一个示例:加载两个库并运行R命令
R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'
R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'
答案 5 :(得分:2)
将* Rscript用于* Unix系统的另一种方法是Process Substitution。
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
答案 6 :(得分:2)
仅供参考。您需要以sudo
:
sudo Rscript path/to/your/file.R