set R_Script="C:\Program Files\R-3.0.2\bin\RScript.exe"
%R_Script% exmpl.R 2010-01-28 example 100 > exmpl.batch 2>&1
或者,使用 Rterm.exe :
set R_TERM="C:\Program Files\R-3.0.2\bin\i386\Rterm.exe"
%R_TERM% --no-restore --no-save --args 2010-01-28 example 100 < exmpl.R > exmpl.batch 2>&1
exmpl.R :
options(echo=TRUE) # if you want see commands in output file
args <- commandArgs(trailingOnly = TRUE)
print(args)
# trailingOnly=TRUE means that only your arguments are returned, check:
# print(commandArgs(trailingOnly=FALSE))
start_date <- as.Date(args[1])
name <- args[2]
n <- as.integer(args[3])
rm(args)
# Some computations:
x <- rnorm(n)
png(paste(name,".png",sep=""))
plot(start_date+(1L:n), x)
dev.off()
summary(x)
library(optparse)
option_list <- list(
make_option(c("-n", "--count_lines"), action="store_true", default=FALSE,
help="Count the line numbers [default]"),
make_option(c("-f", "--factor"), type="integer", default=3,
help="Multiply output by this number [default %default]")
)
parser <- OptionParser(usage="%prog [options] file", option_list=option_list)
args <- parse_args(parser, positional_arguments = 1)
opt <- args$options
file <- args$args
if(opt$count_lines) {
print(paste(length(readLines(file)) * opt$factor))
}
给定一个23行的任意文件 blah.txt .
在命令行上:
Rscript script.R -h 输出
Usage: script.R [options] file
Options:
-n, --count_lines
Count the line numbers [default]
-f FACTOR, --factor=FACTOR
Multiply output by this number [default 3]
-h, --help
Show this help message and exit
10 回答
Dirk's answer here是您需要的一切 . 这是一个可重复性最小的例子 .
我制作了两个文件:
exmpl.bat
和exmpl.R
.exmpl.bat
:或者,使用
Rterm.exe
:exmpl.R
:将两个文件保存在同一目录中并启动
exmpl.bat
. 在结果中你会得到:example.png
有一些情节完成所有工作后
exmpl.batch
您还可以添加环境变量
%R_Script%
:并在批处理脚本中使用它作为
%R_Script% <filename.r> <arguments>
RScript
和Rterm
之间的差异:Rscript
语法更简单Rscript
在x64上自动选择架构(详见R Installation and Administration, 2.6 Sub-architectures)如果要将命令写入输出文件,
Rscript
需要.26文件中的options(echo=TRUE)
几点:
可通过
commandArgs()
访问命令行参数,因此请参阅help(commandArgs)
以获取概述 .您可以在所有平台上使用
Rscript.exe
,包括Windows . 它将支持commandArgs()
. littler可以移植到Windows,但现在只能在OS X和Linux上使用 .CRAN上有两个附加软件包 - getopt和optparse - 它们都是为命令行解析而编写的 .
2015年11月编辑:出现了新的替代方案,我全心全意地推荐docopt .
将其添加到脚本的顶部:
然后你可以引用传递为
args[1]
,args[2]
等的参数 .然后跑
如果你的args是带有空格的字符串,请用双引号括起来 .
试试库(getopt)......如果你想让事情变得更好 . 例如:
你需要littler(发音为'little r')
德克将在大约15分钟内完成;)
由于
optparse
已在答案中多次提及,并且它提供了一个用于命令行处理的综合工具包,下面是一个简短的示例,说明如何使用它,假设输入文件存在:script.R:
给定一个23行的任意文件
blah.txt
.在命令行上:
Rscript script.R -h
输出Rscript script.R -n blah.txt
输出[1] "69"
Rscript script.R -n -f 5 blah.txt
输出[1] "115"
在bash中,您可以构建如下命令行:
您可以看到变量
$z
被bash shell替换为"10",该值由commandArgs
拾取并输入args[2]
,并且R成功执行范围命令x=1:10
等 .仅供参考:有一个函数args(),它检索R函数的参数,不要与名为args的参数向量混淆
如果需要使用flags指定选项(如-h, - help, - number = 42等),可以使用R包optparse(受Python启发):http://cran.r-project.org/web/packages/optparse/vignettes/optparse.pdf .
至少这是我如何理解你的问题,因为我在寻找bash getopt或perl Getopt,或python argparse和optparse的等价物时发现了这篇文章 .
我只是组建了一个很好的数据结构和处理链来生成这种切换行为,不需要库 . 我相信它已经被多次实现了,并且遇到了这个寻找示例的线程 - 我以为我会参与其中 .
我甚至没有特别需要标志(这里唯一的标志是调试模式,创建一个我检查的变量作为启动下游函数的条件
if (!exists(debug.mode)) {...} else {print(variables)})
. 检查下面的lapply
语句的标志产生如下:其中
args
是从命令行参数读入的变量(一个字符向量,例如当您提供这些参数时等效于c('--debug','--help')
)它可以重用于任何其他标志,并且您可以避免所有重复,并且没有库,因此没有依赖项:
请注意,在
flag.details
中,命令存储为字符串,然后使用eval(parse(text = '...'))
进行评估 . 对于任何严肃的脚本来说,Optparse显然是理想的,但有时候功能最少的代码也很好 .样品输出: