在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下这种方式可能会牵涉到别的工具的权限的问题。