找回密码
 立即注册
查看: 4431|回复: 4

R语言使用Rscript命令代替R CMD BATCH执行命令行指令

[复制链接]
发表于 2013-4-17 19:09:23 | 显示全部楼层 |阅读模式
在windows下通过命令行来调用R脚本,可以使用R CMD BATCH file 命令。这样可在别的语言中(java,perl,php)执行此条命令,从而调用R脚本。
但是当在linux下,因为BATCH指令的权限问题,将会导致非root权限无法调用此条指令。这时使用Rscript file代替即可。(貌似Rscript在windows下无法使用,因为MS的CMD不支持)。

==============================================================================================
昨天又重新查看文档,并做了尝试,发现命令行指令可以用以下两种形式:
1.R [--option] [-e expr] <infile >outfile [args]
2.Rscript [--options] [-e expr] file [args]
首先看1.
a. [--option] 代表R指令的选项,具体的选项有很多,可以参考相关文档,其中'--save', '--no-save' or '--vanilla'这三者必须填一个。这就意味着[--option]不能为空。同时推荐使用--slave 选项,这个选项让R命令工作在安静模式,否则,R脚本中的所有内容都会打印在命令行内。
b. [-e expr] 这个没弄明白,我没有用到这个部分。
c. <infile 输入的文件。<不可省略。
d. >outfile 输出的文件,同上。
e. args 希望向R脚本传递的参数,在脚本内可以用commandArgs()函数读取这些参数。
f. 除了args,好像前面几个部分是可以颠倒位置的。但是args参数必须放在最后,否则报错
g. [args]可以直接用想要传递的参数代替,也可以先用--args 指明,比如--args XXX, 这两种方法都可以成功的向脚本传递参数,其参数都可以被commandArgs()函数获得。但是不同在于,如果想使用commandArgs(TRUE)来筛选出合适的参数的时候,必须用 --args XXX

接着看2.
Rscript实际上是R脚本在命令行应用的一个前端
在Rscript [--options] [-e expr] file [args]中:
a. [--options] [-e expr]并非必须的。
b. file前面不用加"<" ,这点和R指令不同,Rscript会自动将第一个单独的字符串(前面没有加-- < > 等字符)作为输入的脚本文件名。
c. 如果想指定输出,可以使用>outfile 这点和R指令相同。
d. 同样[args]必须在最后。但是commandArgs(TRUE)是无法从中筛选出合适的参数的。即是说,如果想使用commandArgs(TRUE),那么只有使用R指令。

PS: commandArgs(TRUE)和commandArgs()区别在于:
对于命令R --vanilla --slave <test.r --args ss
前者得到的参数为 "ss"
后者得到的参数为 "/path/to/R"       "--vanilla"             "--slave"            "--args"                "ss"

R CMD BATCH file 的格式是R CMD command file,这里的command是别的工具,比如BATCH(批处理工具),R借助这种指令来使用别的工具处理R脚本。所以在linux下这种方式可能会牵涉到别的工具的权限的问题。
http://blog.sciencenet.cn/blog-659344-544339.html
回复

使用道具 举报

发表于 2013-6-23 19:00:16 | 显示全部楼层
{:soso_e163:}{:soso_e163:}{:soso_e163:}
回复

使用道具 举报

发表于 2013-8-22 07:57:16 | 显示全部楼层
{:soso_e195:}{:soso_e195:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 07:18 , Processed in 0.037264 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表