找回密码
 立即注册
查看: 11757|回复: 8

编写R程序包通常包括的步骤

[复制链接]
发表于 2013-2-28 14:25:50 | 显示全部楼层 |阅读模式
如何在windows中创建R程序包?

张金龙
jinlongzhang01@gmail.com2010年5月9日修订

在Windows环境下如何编写R程序包,即生成供linux环境编译运行的tar.gz文件,也生成供windows下使用的.zip文件呢?其实并不复杂,只要下载一些工具软件,按照相应的步骤填写相应的“表格”,继而运行一些简单的指令,就可以生成R的程序包了。



编写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 (备选软件不一定要安装):

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:\CTEX\Ghostscript\gs8.64\bin;C:\CTEX\GSview\gsview;C:\CTEX\WinEdt;C:\Program Files\R\R-2.9.0\bin\;


二 R脚本的准备
假如现在我们已经有了一个编好的R函数linmod,用来给出回归的精确结果,存成了r脚本的格式,文件名为linmod.r

其内容如下所示,那么该如何制作R程序包呢?


linmod<- function(x, y)
{
qx <- qr(x)
coef <- solve.qr(qx, y)
df <- nrow(x)-ncol(x)
sigma2 <- sum((y - x%*%coef)^2)/df
vcov <- sigma2 * chol2inv(qx$qr)
colnames(vcov) <- rownames(vcov) <- colnames(x)
list(coefficients = coef,
vcov = vcov,
sigma = sqrt(sigma2),
df = df)
}

三 R包框架的准备
1 生成准备文件
登陆R :开始>所有程序>R>R.2.9.0

(1)清除内存中的对象:
rm(list=ls())

(2)设定工作目录,这里设定为 c:/pa

setwd("c:/pa")

(3)将制作包的源文件 linmod.r拷贝到c:/pa/文件夹下,

之后输入:(注R工作界面最好是英文,中文有时候会出错)

package.skeleton(name="linmod",code_files="c:/pa/linmod.r")

此时,R控制台中显示

Creating directories ...
Creating DESCRIPTION ...
Creating Read-and-delete-me ...
Saving functions and data ...
Making help files ...
Done.
Further steps are described in './linmod/Read-and-delete-me'.


>

可以看到c:/pa文件夹下新出现了一个linmod文件夹

该文件夹下的内容就是R包的框架,包括data文件夹,man文件夹,只要按要求将其填写完整,再进行相应的编译即可。

首先查看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 build packname 给源程序打包,Rcmd build --binary packname建立zip包。Rcmd check packname 检查程序包的错误。

更多信息,应该阅读Writing R Extensions



2 编辑Description文件和rd文件
(1) Description文件的编辑
按照提示,填好各项

Description文件是该程序包的简介,这一格式是Debian Linux的作者发明的。内容如下:
####################################
Package: linmod
Type: Package
Title: test for linear regression
Version: 1.0
Date: 2009-07-20
Author: helixcn
Maintainer: helixcn
Description: To give the exactly results of linear regression.
License: GNU 2 or later
LazyLoad: yes
#####################################
(2)man文件夹中.rd文件编辑
man文件夹中包含两个文件 linmod.Rd和linmod-package.Rd,分别是对linmod()函数和linmod包的介绍,下面逐项填写:
1) linmod.RdRd文件的格式与Tex的格式很像,如果有LaTex的基础,则会毫不费力。如果没有,则需要仔细琢磨一下了。#################################################################
\name{linmod}
\Rdversion{1.1}
\alias{linmod}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
linear regression
}
\description{
to give the more exactly results of linear regression
}
\usage{
linmod(x, y)
}
\arguments{
  \item{x}{
a numeric design matrix for the model
}
  \item{y}{
a numeric vector of responses
}
}
\details{

}
\references{
Friedrich Leisch,2008 Creating R Packages: A Tutorial
}
\author{
helixcn
}
\note{
Please read Friedrich Leisch,2008
}
\examples{data(cats, package="MASS")
mod1 <- linmod(Hwt~Bwt*Sex, data=cats)
mod1
summary(mod1)}
\keyword{ ~kwd1 }
\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line
###########################################################

2)linmod-package.Rd##########################################################
\name{linmod-package}
\Rdversion{1.1}
\alias{linmod-package}
\alias{linmod}
\docType{package}
\title{Linear Regression Modification}
\description{to Give the more exactly output of linear regression rather than R default}
\details{
\tabular{ll}{
Package: \tab linmod\cr
Type: \tab Package\cr
Version: \tab 1.0\cr
Date: \tab 2009-07-20\cr
License: \tab GNU 2.0 or later\cr
LazyLoad: \tab yes\cr
}
}

\author{helixcn
Maintainer: helixcn }
\references{
Friedrich Leisch,2008,Creating R Packages: A Tutorial
}

\seealso{lm}
\examples{
data(cats, package="MASS")
mod1 <- linmod(Hwt~Bwt*Sex, data=cats)
mod1
summary(mod1)
}
######################################################################注意:在Rd文件中,不要出现ASCII码以外的内容,否在在Rcmd check中将不能通过。

四 通过cmd创建R包在Windows下
开始>运行>cmd
键入 cd c:\pa\   将工作目录转移到c:/pa下
键入 Rcmd build --binary linmod  制作window zip包
键入 Rcmd build linmod  制作linux平台下可运行的tar.gz包命令运行完之后可以发现,在c:/pa/文件夹下分别生成了linmod.zip和linmod.tar.gz压缩包。键入 Rcmd check linmod 对linmod程序包源代码中的各项内容进行检查。键入 Rcmd Rd2pdf linmod 生成pdf格式的命令手册。如果作者希望将自己制作的Package上传到CRAN,则必须要通过Rcmd check,并且其中不能有任何错误或警告。

参考网址
[1] http://www.robjhyndman.com/researchtips/building-r-packages-for-windows
[2] http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf
[3] http://www.biostat.uni-hannover.de/teaching/fallstudien/schaarschmidt2.pdf  
回复

使用道具 举报

发表于 2013-2-28 20:23:37 | 显示全部楼层
不错,nice
回复

使用道具 举报

发表于 2013-4-2 15:52:38 | 显示全部楼层
要参与老师做个程序包的计划,很有用的资料,感谢
回复

使用道具 举报

发表于 2014-3-21 15:58:42 | 显示全部楼层
请问楼主 我的Rtools安装之后就不见了  在R里面好像也不行 怎么办呢??
回复

使用道具 举报

发表于 2014-4-16 08:12:54 | 显示全部楼层
前面的架构已经形成文件夹,可是Rcmd提示命令无效,怎么破!
回复

使用道具 举报

发表于 2014-5-15 16:35:56 | 显示全部楼层
很有用,先占位,后面需要时候来学习。
回复

使用道具 举报

发表于 2014-5-16 09:53:35 | 显示全部楼层
很有用的资料,谢谢分享。
回复

使用道具 举报

发表于 2015-1-22 12:48:00 | 显示全部楼层
对啊,Rcmd提示命令无效,怎么回事啊
回复

使用道具 举报

发表于 2015-1-24 10:40:20 | 显示全部楼层
{:soso_e179:}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-22 07:36 , Processed in 0.030854 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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