如何打包R源代码

我在网上看了许多关于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:RR3.0.3R-3.0.3inx64Rcmd.exe;D:RR3.0.3R-3.0.3inx64;D:Rtoolsin;D:Rtoolsgcc-4.6.3in;D:Perl64sitein;D:Perl64in;D:ProgramFilesRR-3.1.3in;D:ProgramFilesRR-3.1.3ini386Rcmd.exe; C:Windowssystem32;C:Windows;C:WindowsC:Program FilesCommon FilesAutodeskShared; D:MIKETEXmiktexinx64

二 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的基础,则会毫不费力。如果没有,则需要仔细琢磨一下了。

ame{linmod}

Rdversion{1.1}

alias{linmod}

%- Also NEED an 'alias' for EACH other topic documented here.

itle{

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{

}

eferences{

Friedrich Leisch,2008 Creating R Packages: A Tutorial

}

author{

helixcn

}

ote{

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##########################################################

ame{linmod-package}

Rdversion{1.1}

alias{linmod-package}

alias{linmod}

docType{package}

itle{Linear Regression Modification}

description{to Give the more exactly output of linear regression rather than R default}

details{

abular{ll}{

Package: ab linmodcr

Type: ab Packagecr

Version: ab 1.0cr

Date: ab 2009-07-20cr

License: ab GNU 2.0 or latercr

LazyLoad: ab yescr

}

}

author{helixcn

Maintainer: helixcn }

eferences{

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:RR3.0.3R-3.0.3inx64

回车之后

D:RR3.0.3R-3.0.3inx64>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/

原文地址:https://www.cnblogs.com/yupeter007/p/4826321.html