R命令行处理CommandLineProcessing commandline.cui下载

编译自https://projects.uabgrid.uab.edu/r-group/wiki/CommandLineProcessing

一般运行一个R脚本的命令如下:
R CMD BATCHscriptname.R

`R` 表示Rinterpreter,`CMD` 表示一个 R工具会被使用。一般的语法是`R CMD 命令参数`。`BATCH`支持非交互式地执行脚本命令,即程序执行时不用与我们沟通,不用运行到半路还需要我们给个参数啥的。

http://cran.r-project.org/doc/manuals/R-intro.html这个网址有R命令行的语法和选项说明。

=======读懂命令行 =======
为了展示命令行是如何invoke R的,我们用两个简单的R命令,显示Rinvocation的过程中传递给它的参数。
进入R环境。(句首'>'为interpreterprefix)
>args =commandArgs()
>print(args)
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"

`commandArgs()`函数返回一个数组,其中包含命令行上的参数信息。
`print()`函数打印出数组的所有元素。

也可以不进入交互式的R环境,直接创建R脚本然后执行。脚本中包含三行:
args =commandArgs()
print(args)
q()

由于你配置和路径设置的不同,R所在的目录可能不一样。此例重要的一点是你可以看到print命令的输出结果,包括数组元素的索引号和命令行的具体参数。该输出结果显示命令行参数只有一个,即R本身。如果有其他参数,则依次是第二个,第三个,第四个……参数。

请注意R数组是从1开始索引,不同于C和perl数组的从零开始。

=======测试脚本=======
在linux环境下,输入如下:(句首'>'为interpreterprefix)
>cat> printargs.R <<EOF
>args =commandArgs()
>print(args)
>q()
>EOF
这样就在printargs.R脚本中写入了三行R命令。

我们可以通过'<'符号将这个脚本传递给R执行。这样就替换了输入通道,使R的执行变成非交互式的。R会执行脚本中的命令,完成后退出。既然我们在非交互式地执行此脚本,我们需要让R知道在它退出的时候需要做什么,因为一般退出的时候R都会问我们要不要保存状态(savestate)。我们不需要为这些测试保存状态,因此加上一个`--no-save`就好。
命令如下:
>R --no-save< printargs.R

当你执行上述命令时。输出如下:
R version 2.5.0(2007-04-23)
...<welcomemessage omitted>...
> args<- commandArgs()
>print(args)
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"--no-save"
>q()

注意现在我们的命令行参数有两个,R命令以及`--no-save`参数。还要注意的是'< printargs.R'并不是参数,因为它是在R运行之前,由Shell(eg,bash)进行处理的。

默认的R输出会包括R的版本信息以及一些欢迎信息,用`--quiet`参数可以不让R输出这些东西。通常R还会在输出结果中将命令再print一遍,看起来就像是在交互式地执行一样。用'--slave'可以不让R再print一遍命令。

因此我们的新命令看起来像这样:
>R --no-save--quite --slave < printargs.R

运行结果看起来像这样:
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"--no-save"
[3]"--quiet"
[4]"--slave"

现在我们只能看到'print(args)'命令的输出结果,少了许多额外的信息。一共显示了四个参数:R本身以及我们加上的三个参数,

其实`--slave`参数通常包括了`--no-save`和`--quite`,因此实际上我们只用`--slave`就好了。
$R --slave <printargs.R
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"--slave"

这样参数就减少到两个。

======= 使用 BATCH=======
我们也可以用`R CMDBATCH`来运行此脚本。
>R CMD BATCH printargs.R

如上所述,`BATCH`使得R非交互式地运行,没有一个终端/用户用于输入输出。这意味着必须给它的输出找个地方。BATCH命令默认会创建一个输出文件,前缀和我们的脚本相同,后缀为'.Rout'。因此上述命令会生成一个`printargs.Rout`文件,内容如下:

R version 2.5.0(2007-04-23)
...<welcomemessage omitted>...
> args<- commandArgs()
>print(args)
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"-f"
[3]"printargs.R"
[4]"--restore"
[5]"--save"
[6]"--no-readline"
>q()
>proc.time()
user system elapsed
0.8610.052 0.910

值得注意的几点:
1.输出看起来就像R是交互式地运行的。
2.输出结果中的参数多了一些。
3.最后有一个运行总结,显示运行脚本花费的时间。

用`--slave`参数可以不显示题头和命令信息。
>R CMD BATCH--slave printargs.R

运行总结信息仍然会显示,要不显示,我们需要将命令中的q()改为q(runLast=FALSE)。

======= 传递参数 =======
我们用commandArgs()`函数更多地是来传递我们自己的参数。使用`--args`参数可以传递我们自己的参数,而不被R当成是自己的参数。
例如:
>R --slave--args test1 test2=no < printargs.R
输出:
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"--slave"
[3]"--args"
[4]"test1"
[5]"test2=no"

除了R自己的参数,在参数位置4和5上是我们自己的参数。如果我们不用`--args`,R会将之解释为自己的参数,并报错。

$ R --slavetest1 test2=no < printargs.R
ARGUMENT'test1' __ignored__

ARGUMENT'test2=no' __ignored__

[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"--slave"
[3]"test1"
[4]"test2=no"

使用`BATCH`命令时稍有一些变化。`--argstest1 test2=no` 语句必须用双引号括起来。正确的BATCH语法为:
R命令行处理CommandLineProcessing commandline.cui下载
R CMD BATCH--slave "--args test1 test2=no" printargs.R
输出文件`printargs.Rout`看起来像这样:
[1]"/share/apps/R/R-2.5.0/gnu/lib/R/bin/exec/R"
[2]"-f"
[3]"printargs.R"
[4]"--restore"
[5]"--save"
[6]"--no-readline"
[7]"--slave"
[8]"--args"
[9]"test1"
[10]"test2=no"

特别要注意的是,`BATCH`命令有一个很严格语法:`R CMD BATCH optionsinfile[outfile]`。如果你弄混了参数,输出结果可能会把你的脚本覆盖掉。例如,如果你把命令写成了`R CMD BATCH --args test1printargs.R`,此时`--args`将被视作R自己的参数,`test1`将被视作输入文件,而'printargs.R'被视作输出文件。结果是脚本文件'printargs.R'将会被运行`test1`的输出结果覆盖掉,而`test1`又不是一个R脚本,因此输出结果是报错信息:

Error: syntaxerror, unexpected SYMBOL, expecting 'n' or ';' in "Rversion"
Executionhalted

======= 只处理我们自己的参数=======
给`commandArgs()`加上TRUE选项可以只返回我们自己的参数(跟在`--args`后面的那些。)默认是FALSE。
将我们的脚本文件改为:
args= commandArgs(TRUE)
print(args)
q()
执行R--slave --args test1 test2=no <printourargs.R后
输出如下:
[1]"test1""test2=no"

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/99367.html

更多阅读

如何打开命令行窗口 如何打开我的电脑

如何打开命令行窗口——简介如何打开命令行窗口如何打开命令行窗口——工具/原料电脑如何打开命令行窗口——第一种打开方法如何打开命令行窗口 1、点击自己的电

命令行下怎样释放和获取IP地址 获取ip地址命令

今天跟大家讲的就是命令提示符下获取和释放IP地址的操作,主要是针对使用DHCP来获取IP地址的用户,下面我们一起看看怎样操作吧。命令行下怎样释放和获取IP地址——工具/原料命令提示符命令行下怎样释放和获取IP地址——步骤/方法命

Bat批处理命令使用教程(完整篇) bat批处理命令行参数

这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品

声明:《R命令行处理CommandLineProcessing commandline.cui下载》为网友学会珍惜分享!如侵犯到您的合法权益请联系我们删除