读书频道 > 软件开发 > 其他综合 > R语言经典实例
3.13 批量运行R代码
2013-05-08 16:34:02     我来说两句 
收藏    我要投稿   

本文所属图书 > R语言经典实例

O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势...  立即去当当网订购

问题

你正在编写一个命令脚本,如UNIX或OS X系统的shell脚本,或Windows系统中的批处理脚本,并且你希望在这些脚本中执行R代码。

解决方案

使用带有CMD BATCH子命令的方式运行R程序,并给出脚本文件名和输出文件名:
$ R CMD BATCH scriptfile outputfile

如果需要将输出结果发送到标准输出设备中,或者希望将命令行参数传递到脚本中,可以考虑应用Rscript命令:
$ Rscript scriptfile arg1 arg2 arg3

讨论

R是一个交互式软件,它提示用户输入,然后显示输出结果。有时你想在批处理模式下运行R,从脚本读取命令。这对于shell内部的脚本,例如含有统计分析的脚本而言特别有用。

CMD BATCH子命令把R转到批处理模式,它读取脚本文件scriptfile并且把输出写入输出文件outputfile。这个运行过程中不与用户交互。

你可能会根据具体情况使用命令行选项,调整R的批处理过程。例如,使用--quiet选项来避免启动信息,否则将使输出信息混乱:
$ R CMD BATCH --quiet myScript.R results.out

下面是一些其他批处理模式下的实用命令:
--slave

类似于--quiet,它禁止回送输入的信息,使R软件输出的信息更为简洁。
--no-restore

在R启动时不还原工作空间。对于希望以空白工作空间启动R的脚本而言,这个选项很有必要。
--no-save

在退出R时,不保存工作空间;否则,R会保存当前工作空间并覆盖原有工作目录中的.RData文件。
--no-init-file

不读取.Rprofile文件或者~/. Rprofile文件。

在脚本运行结束后,CMD BATCH子命令一般会使用proc.time函数显示其执行的时间。如果你不需要显示该时间,可以在代码最后一行调用参数为runLast=FALSE的q函数,它将防止调用proc.time函数。

CMD BATCH子命令有两个限制条件:输出必须总是传送到一个文件中,并且无法简单地将命令行参数传送到脚本中。如果这两个限制成为问题,可以考虑使用R软件自带的Rscript程序。Rscript命令的第一个命令行参数是脚本文件的名称,其余的参数将传递给脚本代码:
$ Rscript myScript.R arg1 arg2 arg3

在脚本中,命令行参数可以通过调用commandArgs函数来获取,该函数会把参数作为一个字符串向量返回:
argv <- commandArgs(TRUE)

Rscript程序和CMD BATCH命令使用上面所提到的相同的命令行选项。

 将输出结果输出到标准输出设备中,该设备是R从调用它的shell脚本中继承来的。当然,可以通过一般的重定向方法将输出重定向到一个文件中:
$ Rscript --slave myScript.R arg1 arg2 arg3 >results.out

下面是一个名为arith.R的简易R脚本文件,它对两个命令行参数进行四个算术运算:
argv <- commandArgs(TRUE)
x <- as.numeric(argv[1])
y <- as.numeric(argv[2])
cat("x =", x, "\n")
cat("y =", y, "\n")
cat("x + y = ", x + y, "\n")
cat("x - y = ", x - y, "\n")
cat("x * y = ", x * y, "\n")
cat("x / y = ", x / y, "\n")

脚本以下面的形式调用:
$ Rscript arith.R 2 3.1415

产生如下结果:
x = 2
y = 3.1415
x + y = 5.1415
x - y = -1.1415
x * y = 6.283
x / y = 0.6366385

Linux或UNIX系统中,你可以在脚本的开头添加#!后跟随Rscript程序的路径,这样脚本就是完全自我包含的了(即代码变得完全独立于外部)。假定Rscript程序安装在/usr/bin/Rscript目录中,你可以在arith.R脚本文件中添加下面一行,使其成为自我包含代码:
#!/usr/bin/Rscript --slave
argv <- commandArgs(TRUE)
x <- as.numeric(argv[1])
.
. (etc.)
.

在提示符处,我们把脚本文件标记为可执行文件:
$ chmod +x arith.R

此时我们可以不用Rscript前缀而直接调用脚本代码:
$ arith.R 2 3.1415

另请参阅

有关R中运行脚本文件的详情,参见方法3.12。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.12 运行脚本
下一篇:3.14 获取和设定环境变量
相关文章
图文推荐
Python语言及其应用
2.2.1 Java Buffer
3.9 OpenCL错误处理
3.6.3 查询和管理内
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站