在linux下如何编写脚本调用R语言写的程序呢?

R语言进行批处理有2种方式:

  • R CMD BATCH --options scriptfile outputfile
  • Rscript --options scriptfile arg1 arg2 arg3 >outputfile

options的选项以及含义如下:

  • --slave          类似于--quiet,它禁止回送输入的信息,使R软件输出的信息更为简洁。
  • --no-restore 在R启动时不还原工作空间。对于希望以空白工作空间启动R的脚本而言,这个选项很有必要。
  • --no-save     在退出R时,不保存工作空间;否则,R会保存当前工作空间并覆盖原有工作目录中的.RData文件。
  • --no-init-file  不读取.Rprofile文件或者~/. Rprofile文件。

1. R CMD BATCH的用法

这种最基本的知识,不多说,直接上例子:

    clotting <- data.frame(
u = c(5,10,15,20,30,40,60,80,100),
lot1 = c(118,58,42,35,27,25,21,19,18),
lot2 = c(69,35,26,21,18,16,13,12,12))
cat("Model data:\n")
print(clotting)
warning("Model starting")
obj <- glm(lot1 ~ log(u), data=clotting, family=Gamma)
cat("\nEstimated parameters:\n")
coef(summary(obj))
q(runLast=FALSE)

注:代码最后的是不让程序打印proc.time函数的输出结果。

上述的命令保存成test.R,在命令行中通过下面的命令进行调用:

> R CMD BATCH --slave test.R out

out文件中的输出结果为:

Model data:
u lot1 lot2
1 5 118 69
2 10 58 35
3 15 42 26
4 20 35 21
5 30 27 18
6 40 25 16
7 60 21 13
8 80 19 12
9 100 18 12
警告信息:
Model starting Estimated parameters:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.01655438 0.0009275466 -17.84749 4.279149e-07
log(u) 0.01534311 0.0004149596 36.97496 2.751191e-09

2. Rscript 用法

与上述方法不同的是,Rscript可以传入参数,其中options的选项取值是相同的。下面的例子是写在arith.R文件中,通过argv<-commandArgs(TRUE)来将传递的参数转化为字符串数组。

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")

调用的命令:

> Rscript arith.R  1 2 >output

输出结果:

x= 1
y= 2
x+y= 3
x^y 1

也可以将arith.R改成可执行文件在命令行中直接执行:

#! /usr/bin/Rscript --slave
library(MASS)
argv<-commandArgs(TRUE)
x<-as.numeric(argv[])
y<-as.numeric(argv[])
cat("x=",x,"\n")
cat("y=",y,"\n")
cat("x+y=",x+y,"\n")
cat("x^y",x^y,"\n")
write.matrix(matrix(:x,nrow=y),file="m.txt",sep=" ")

注:如果R语言中用到了其他的包,则在文件中加入相应的包名即可。

在命令行中修改arith.R为可执行文件:

> chmod +x arith.R
> ./arith.R 10 2

输出结果:

x= 1
y= 2
x+y= 3
x^y 1

m.txt文件中数据为:

 1  3  5  7  9
2 4 6 8 10

参考文章:

1. http://blog.revolutionanalytics.com/2009/06/running-scripts-with-r-cmd-batch.html

2. http://book.2cto.com/201305/21969.html

R之批处理的更多相关文章

  1. R语言-Kindle特价书爬榜示例 & 输出HTML小技巧

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元 ...

  2. R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转)

    自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元的书打特价,但是每次都去刷那些榜单太麻烦了,而且榜单又不能按照价格排名,捞书有点累 所以自己用R语言的rvest包 ...

  3. R语言实战(第二版)-part 1笔记

    说明: 1.本笔记对<R语言实战>一书有选择性的进行记录,仅用于个人的查漏补缺 2.将完全掌握的以及无实战需求的知识点略去 3.代码直接在Rsudio中运行学习 R语言实战(第二版) pa ...

  4. [How to] 使用HBase协处理器---Endpoint客户端代码的实现

    1.简介 不同于Observer协处理器,EndPoint由于需要同region进行rpc服务的通信,以及客户端出数据的归并,需要自行实现客户端代码. 基于[How to] 使用HBase协处理器-- ...

  5. 计算从哪天起应该购买预售火车票.cs

    代码直接CSC编译即可. 计算从哪天起应该购买预售火车票.cs using System; using System.Diagnostics; using System.IO; class Progr ...

  6. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  7. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  8. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  9. R基础之批处理--R IN ACTION

    1.5 批处理多数情况下,我们都会交互式地使用R:在提示符后输入命令,接着等待该命令的输出结果.偶尔,我们可能想要以一种重复的.标准化的.无人值守的方式执行某个R程序,例如,你可能需要每个月生成一次相 ...

随机推荐

  1. hdu 2255 奔小康赚大钱 最大权匹配KM

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...

  2. JS 数组的基础知识

    数组 一.定义 1.数组的文字定义 广义上说,数组是相同类型数据的集合.但是对于强类型语言和弱类型语言来说其特点是不一样的.强类型语言数组和集合有以下特点. 数组强类型语言:1.数组里面只能存放相同数 ...

  3. On Explainability of Deep Neural Networks

    On Explainability of Deep Neural Networks « Learning F# Functional Data Structures and Algorithms is ...

  4. WPF使用RoutedCommand自定义命令

    主要代码如下所示: /// <summary> /// 声明并定义命令. /// </summary> RoutedCommand ClearCommand = new Rou ...

  5. Silverlight编程模型

    Silverlight支持Javascript API编程模型和托管API编程模型这两种编程模型,它们的基本作用都是用于XAML界面文件中的XAML对象,基于托管API编程的XAML应用程序是通过x: ...

  6. Java对象初始化详解

    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...

  7. Xmarks丢失书签

    想体验下Xmarks,不同浏览器同步书签,听说很好用,就安装Chrome插件,没想到竟然把我的所有书签都丢了. 不过在网上找到了回复的办法,也很简单: 原始地址:http://irising.me/2 ...

  8. HDU4784 Dinner Coming Soon(dp)

    当时区域赛的一道题.题意大概是这样的,有一个1~N的图,然后你要从1->N,其中每经过一条边需要消耗你的时间和金钱,每到一个地方可以选择什么都不做,或者买一包盐,卖一包盐,身上不能同时有超过B包 ...

  9. UITableView局部刷新

    只刷新cell不刷新section,这问题还难住了一阵子 需要用到: - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnima ...

  10. 《Thinking in C++》学习笔记(二)【第三章】

    第三章 C++中的C 3.4.4 指针简介 ‘&’运算符:只要在标识符前加上‘&’,就会得出标识符的地址. C和C++有一个专门存放地址的变量类型.这个变量类型叫做指针(pointer ...