找回密码
 注册
查看: 5005|回复: 2

在windows中创建R程序包简明指南

[复制链接]
发表于 2011-6-22 18:10:28 | 显示全部楼层 |阅读模式
windows中创建R程序包简明指南


R软件中CRAN镜像迄今已经收藏了2300多个程序包,几乎涉及了统计编程的所有领域,每个程序包既有源代码,又有编译好的Windows或者MacOS平台下的程序。在编写R函数较多时,最好将其制作成程序包,便于管理和使用。如果愿意,还可以将R程序包提交到CRAN,与世界各地的用户分享成果。
Windows环境下如何编写R程序包?也就是生成供linux环境编译运行的tar.gz文件,也生成供windows下使用的.zip文件?这一过程并不复杂,但要下载一些工具软件,按照相应的步骤填写相应的表格,继而在控制台中输入一些指令。如果你是R的用户,相信这些不应该陌生了。
Windows下编写R程序包通常包括以下几步:
1)工具软件Rtools的安装和备选软件的安装。
2r脚本的准备,也就是用来生成程序包的函数脚本。
3)利用R中自带的package.skeleton()函数,生成制作包所需要的Description 文件和帮助文件.rd
4)按要求填写生成的Description 文件和帮助文件.rd
5)在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz,并进行相应的检查。
下面我们来创建最简单的一个R程序包,其中只包含一个函数。

工具软件安装和配置
制作r包的工具软件包括RtoolsHTML编译器(R2.10后不需要HTML编译器)MikTeX Ctex (如果不想获得pdf手册,则不需要安装)
1 工具软件安装
1Rtools(制作R包的主要工具)
Rtools是在windows下制作R包的一系列工具,其中包括
1 CYGWIN Windows下模拟UNIX环境
2 MinGW编译器,可用来编译CFortran语言。
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\;




图1 设置启动路径

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())生成相应的包框架。
这里,我们要创建一个名为freqR包。则输入以下命令:
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-meDESCRIPTION文件,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文件中加入Suggestsvegan, 否则在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
#####################################
2man文件夹中.rd文件编辑
man文件夹中包含两个文件 freq.Rdfreq-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{
Jinlong
Zhang \email{jinlongzhang01@gmail.com}
}
\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.zipfreq_1.0.tar.gz压缩包。
键入 Rcmd check freq freq_1.0.tar.gz代码的各项内容进行检查。
键入 Rcmd Rd2pdf freq 生成pdf格式的命令手册。
4cmd中输入Rcmd build freq,获得相应的tar.gz程序包
如果作者希望将自己制作的Package上传到CRAN,则必须要通过Rcmd check,并且其中不能有任何错误或警告。
参考网址
回复

使用道具 举报

 楼主| 发表于 2011-6-22 18:55:22 | 显示全部楼层
注意事项

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\;

这里一定要设置正确

在运行package.skeleton(name="freq", list = ls()) 之前,
要先将打包函数读入到R操作界面

三要用英语环境操作
回复 支持 反对

使用道具 举报

发表于 2011-8-10 10:33:36 | 显示全部楼层
挺好的,正要学习怎样在windows下用,一直在linux下用的。
有个问题问下,window下怎样用perl调用R?
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 21:44 , Processed in 0.024250 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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