在windows中创建R程序包简明指南
R软件中CRAN镜像迄今已经收藏了2300多个程序包,几乎涉及了统计编程的所有领域,每个程序包既有源代码,又有编译好的Windows或者MacOS平台下的程序。在编写R函数较多时,最好将其制作成程序包,便于管理和使用。如果愿意,还可以将R程序包提交到CRAN,与世界各地的用户分享成果。
在Windows环境下如何编写R程序包?也就是生成供linux环境编译运行的tar.gz文件,也生成供windows下使用的.zip文件?这一过程并不复杂,但要下载一些工具软件,按照相应的步骤填写相应的“表格”,继而在控制台中输入一些指令。如果你是R的用户,相信这些不应该陌生了。
在Windows下编写R程序包通常包括以下几步:
(1)工具软件Rtools的安装和备选软件的安装。
(2)r脚本的准备,也就是用来生成程序包的函数脚本。
(3)利用R中自带的package.skeleton()函数,生成制作包所需要的Description 文件和帮助文件.rd 。
(4)按要求填写生成的Description 文件和帮助文件.rd (5)在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz,并进行相应的检查。
下面我们来创建最简单的一个R程序包,其中只包含一个函数。
一
工具软件安装和配置
制作r包的工具软件包括Rtools,HTML编译器(R2.10后不需要HTML编译器),MikTeX 或 Ctex (如果不想获得pdf手册,则不需要安装) 1 工具软件安装
(1)Rtools(制作R包的主要工具)
Rtools是在windows下制作R包的一系列工具,其中包括
1) CYGWIN 在Windows下模拟UNIX环境
2) MinGW编译器,可用来编译C和Fortran语言。
3) Perl 下载地址:
http://www.murdoch-sutherland.com/Rtools/ (2)
微软HTML编译器(备选): 用来从源文件生成HTML格式的帮助文件(2.10以后的版本则不需要) 下载地址:http://go.microsoft.com/fwlink/?LinkId=14188 (3) MikTeX 或CteX(备选)
用来生成PDF格式的帮助文件
下载地址:http://www.miktex.org/
www.ctex.org/
分别按照要求安装好。
2 设置文件启动路径:
设置启动路径的目的是在cmd命令行可以直接调用Rtools等相应软件。
右键点击:
我的电脑>属性>高级>环境变量>系统变量
PATH一项,点击“编辑”,检查是否具有以下路径。通常软件在安装时已经自动配置好了启动路径。如果没有,需要手工添加:
c:\Rtools\bin;c:\Rtools\perl\bin;c:\Rtools\MinGW\bin; C:\CTEX\MiKTeX\miktex\bin;C:\CTEX\CTeX\ctex\bin;C:\CTEX\CTeX\cct\bin;C:\CTEX\CTeX\ty\bin; C:\Program Files\R\R-2.11.0\bin\;
二 R脚本的准备
假如现在我们已经有了一个编好的R函数freq,用来计算物种出现的相对频度,存成了r脚本的格式,文件名为freq.r 其内容如下所示
############################################## freq <- function(matr){ matr <- as.matrix(matr)
if(!is.matrix(matr)){
stop("The input data must be matrix!\n") }
if(any(is.na(matr))){
matr <- na.omit(matr)
print(paste("NA found in matrix, and have been removed\n"))
}
matr[matr>1] <- 1
result <- apply(matr, 2, sum)/nrow(matr)
return(result)
} ############################################## 下面是用R自带的package.skeletons()函数生成R程序包的框架
三 R包框架的准备
1 生成准备文件
登陆R :开始>所有程序>R>R.2.9.0 (1)清除内存中的对象,目的删除R内存中所有不需要的数据或函数:
rm(list=ls()) (2)设定工作目录,这里设定为 c:/pa setwd("c:/pa") (3)先用source()函数将r脚本中的函数读取。
如果要创建的R包中有很多函数,则建议先将各函数存在一个脚本文件,再用source()函数读取该脚本中的各函数,并将需要的数据读取到内存中。用package.skeleton (name="packname", list = ls())生成相应的包框架。
这里,我们要创建一个名为freq的R包。则输入以下命令:
package.skeleton(name="freq", list = ls()) 此时,R控制台中显示
> package.skeleton(name="freq", list = ls()) Creating directories ... Creating DESCRIPTION ... Creating Read-and-delete-me ... Saving functions and data ... Making help files ... Done. Further steps are described in './freq/Read-and-delete-me'. >
可以看到c:/pa文件夹下新出现了一个freq文件夹
该文件夹下的内容就是R包的框架,包括Read-and-delete-me,DESCRIPTION文件,r文件夹,man文件夹,只要按要求将其填写完整,再进行相应的编译即可。
Read-and-delete-me 包括如何创建R包
DESCRIPTION 是对R包的简要介绍
r文件夹中存放的是.r文件,即各函数的源代码
man文件夹下存放的是Rd文件,也就是R帮助的源代码
首先查看Read-and-delete-me文件
文件内容如下:
#################################################################################### * Edit the help file skeletons in 'man', possibly combining help files for multiple functions. * Put any C/C++/Fortran code in 'src'. * If you have compiled code, add a .First.lib() function in 'R' to load the shared library. * Run R CMD build to build the package tarball. * Run R CMD check to check the package tarball. Read "Writing R Extensions" for more information. #################################################################################### 大致意思如下:
可以man文件夹下编辑帮助文件
C/C++/Fortran 的源代码应该放入src文件夹下
需要在登录时载入包
可以运行R CMD建立和检查相应的包
注:这里的R CMD说的是在Linux的终端输入的命令,实际上在Windows环境中应该输入 Rcmd Rcmd build packname 给源程序打包,
Rcmd build --binary packname建立zip包。
Rcmd check packname 检查程序包的错误。
查看过该文件之后,需要将其删除。
2 编辑Description文件和rd文件
(1) Description文件的编辑
按照提示,填好各项
Description文件是该程序包的简介,这一格式是Debian Linux的作者发明的。
内容如下:
红色部分是需要手工编辑的。
需要特别注意的是,本程序包的例子中使用了vegan程序包的数据,则应该在Description文件中加入Suggests:vegan, 否则在Rcmd check中将不能通过。
如果程序包中的R函数引用vegan程序包的函数,则需要在Description文件中加入 Depends:vegan 这样在该程序包被载入的同时,保证vegan程序包也被载入。
#################################### Package: freq Type: Package Title: Calculate relative frequency Version: 1.0 Date: 2010-05-20 Author: Jinlong Zhang Maintainer: Jinlong Zhang
Description: Calculate relative frequency for species matrix. License: GPL-2
LazyLoad: yes Suggests: vegan ##################################### (2)man文件夹中.rd文件编辑
man文件夹中包含两个文件 freq.Rd和freq-package.Rd,分别是对freq()函数和freq包的介绍,下面逐项填写: Rd文件的格式与Tex的格式很像,如果有LaTex的基础,则会毫不费力。如果没有,则需要仔细琢磨一下了。Rd文件的项目中不能留空,否则在检查时会显示警告。其中title是必须填写的内容。同时要注意:在Rd文件中,不要出现非ASCII码字符,否则在Rcmd check中将不能通过。
freq.Rd 文件内容:红色的为手工输入的部分,原文件中%后的为注释,可以忽略
################################################################# \name{freq} \alias{freq} \title{ Species relative frequency
} \description{ This function calculates the species relative frequency which equals to the numbers of occupied plots partitioned by the total number of plots for each species. } \usage{ freq.calc(matr) } \arguments{
\item{matr}{ The standard species matrix
} } \details{ The input data is a standard species matrix with rows for plots and column for species. } \value{ Returns a vector that contains relative frequency for each species included in the input matrix. } \references{ None
} \author{ } \examples{ library(vegan) data(BCI) freq(BCI) } \keyword{ frequency } \keyword{ species } ###################################################################### freq-package.Rd中帮助文件的填法与freq.Rd的类似。
四
通过cmd创建R包
在Windows 开始> 运行> cmd 键入 cd c:\pa\
将工作目录转移到c:/pa下
键入 Rcmd build --binary freq
制作windows zip包
键入 Rcmd build freq
制作linux平台下可运行的tar.gz包
命令运行完之后可以发现,在c:/pa/文件夹下分别生成了freq.zip和freq_1.0.tar.gz压缩包。
键入 Rcmd check freq 对freq_1.0.tar.gz代码的各项内容进行检查。
键入 Rcmd Rd2pdf freq 生成pdf格式的命令手册。
图4在cmd中输入Rcmd build freq,获得相应的tar.gz程序包
如果作者希望将自己制作的Package上传到CRAN,则必须要通过Rcmd check,并且其中不能有任何错误或警告。
参考网址
|