苑黎

导航

 

我在网上看了许多关于R打包的一些方法,我针对我在打包中遇到的问题谈一谈。

 

编写R程序包通常包括以下几步:

 

(1工具软件Rtools的安装和备选软件的安装。

 

(2)r脚本的准备,也就是用来生成程序包的函数脚本。

 

(3)利用R中自带的package.skeleton()函数,生成制作包所需要的Description 文件和帮助文件帮助文件.rd。

 

(4)编辑该函数生成的Description 文件和帮助文件.rd

 

(5)在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz

 

 

一 工具软件安装和配置

制作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

 

用来PDF格式的帮助文件下载地址:http://www.miktex.org/      www.ctex.org/ 

 

分别按照要求安装好。

 

 

2 设置文件启动路径:

设置启动路径的目的是在cmd命令行可以直接调用Rtools。右键点击:

我的电脑>属性>高级>环境变量>系统变量  PATH一项,点击“编辑”,检查是否具有以下路径,如果没有,需要手工添加:

 

D:\R\R3.0.3\R-3.0.3\bin\x64\Rcmd.exe;D:\R\R3.0.3\R-3.0.3\bin\x64;D:\Rtools\bin;D:\Rtools\gcc-4.6.3\bin;D:\Perl64\site\bin;D:\Perl64\bin;D:\ProgramFiles\R\R-3.1.3\bin;D:\ProgramFiles\R\R-3.1.3\bin\i386\Rcmd.exe; C:\Windows\system32;C:\Windows;C:\WindowsC:\Program Files\Common Files\AutodeskShared\; D:\MIKETEX\miktex\bin\x64\

二 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.3.0.3

 

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

 

(2)设定工作目录,这里设定为 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文件夹,R,DESCRIPTITION,NAMESPACE,Read-and-delet-me,其中namespac和Read-and-delet-me是不需要我们去编译的,这两个文件是不重要的东西,没有必要去修改。重要的是man文件,当导入该包时,包里面的内容将会在help中显示出来。Description是大致描述该包的内容

 

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: GPL (>= 2) (包的执照最好填写这个)

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 INSTALL --build linmod   (一定要注意build后面有一个空格,一定别忘记了,不然就会出错) 制作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,并且其中不能有任何错误或警告。

五,可以在cmd下运行整个打包过程:

  在cmd中进入你所安装的R.exe文件,我电脑里的安装目录:

D:\R\R3.0.3\R-3.0.3\bin\x64

回车之后

D:\R\R3.0.3\R-3.0.3\bin\x64>R.exe

就进入虚拟环境进行操作,为该包装骨架,及输入package.skeleton(name="linmod",code_files="c:/pa/linmod.r")

,即在文件夹下多出现一个linmod包,在quit()退出R操作,

在键入cd c:\pa\   将工作目录转移到c:/pa下

键入Rcmd check linmod 进行核查,核查是不是有错误,有error的地方需要改正

键入 Rcmd INSTALL --build linmod 即可打包,

 

 

 

参考网址

[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 

 

还有一种R打包的简单方式加载devtools包  :http://cos.name/2013/11/building-r-packages-easily/

posted on 2015-09-21 15:27  苑黎  阅读(2496)  评论(0编辑  收藏  举报