R包提供了一个加载所需代码、数据和文件的集合。R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的基本功能。与此同时,R作为一个开源软件,它提供了各种统计计算函数,从而方便使用者能够灵活机动的进行数据分析,甚至创造出符合特定需要的新统计计算方法,而这些函数大多是以包的形式提供,这些都是世界各地R用户自己编写的,并上传到网上分享。因此,制作出属于用户自己的R包,并与全世界的R用户共享是一件非常有意思的事情。
在开始R包的制作之前,首先对R包的基本结构进行简要的介绍。R包的基本结构如下:
package (包的名字)
|
|--DESCRIPTION (描述文件,包括包名、版本号、标题、描述、依赖关系等)
|--NAMESPACE (包的命名空间文件)
|--R (函数源码)
|--function1.R
|--function2.R
|--...
|--man (帮助文档,存放函数说明文件的目录)
|--function1.Rd
|--Package.Rd
|--...
|--...
其中,DESCRIPTION是包描述文件,它是一个纯文本文件,其中记录了与R包有关的信息,它没有扩展名,Windows用户可以用记事本打开。DESCRIPTION包含以下基本内容,注意只有几个字段是必须的,其它都可选:
Package: package name /表示包的名称
Type: Package /表示R-Project的类型,R包对应的为“Package”
Title: What the package does (short line) /标题,简要描述R包功能
Version: 1.0 /记录R包的版本信息
Date: when the package is built /记录R包的制作时间
Author: Who wrote it /记录R包的作者
Maintainer: Who to complain to <yourfault@somewhere.net> /记录R包的维护者
Description: More about what it does (maybe more than one line) /详细描述R包的功能
License: What license is it under? /表示R包的使用许可
R软件回显信息如下,表明包搭建成功。
Creating directories ...
Creating DESCRIPTION ...
Creating NAMESPACE ...
Creating Read-and-delete-me ...
Copying code files ...
Making help files ...
Done.
Further steps are described in './hello/Read-and-delete-me'.
3. 按要求填写生成的Description 文件和帮助文件.rd
上述代码执行完毕之后,将在目录D:\R-Pkg-Produce下自动生成一个与R包名字相同的文件夹,该文件夹下的内容就是R包的基本框架,包括Read-and-delete-me,DESCRIPTION文件,r文件夹,man文件夹,接下来所要进行的工作就是用记事本打开相应的文件,按要求将其填写完整,再进行相应的编译即可。
本例子中的hello-package.Rd文件编写如下:
\name{hello-package}
\alias{hello-package}
\title{a hello function demo}
\description{
a hello function demo
}
\usage{
hello(name)
}
\arguments{
\item{name}{a word}
}
\details{
nothing
}
\value{
no return
}
\references{
nothing
}
Hello.rd文件的编写与hello-package.Rd文件类似,需要注意的是,rd文件中的\title项一定需要填入内容,否则会导致R CMD的check过程出错。本例子中的hello.Rd文件编写如下,注意,与hello-package.Rd文件相比,在hello.Rd我们有选择地保留了一小部分内容。
\name{hello}
\alias{hello}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
function hello(x) to say hello x
}
\description{
this function hello() provides a package demo
}
\usage{
hello(name)
}
DESCRIPTION文件编写如下:
Package: hello
Type: Package
Title: Say hello
Version: 1.0
Date: 2013-12-23
Author: Developer
Maintainer: Developer <Developer@some.domain.net>
Description: This package provides a package demo
License: GPL (>= 2)
将在C:\Users\用户名(在本例中为C:\Users\Administrator)路径下生成一个hello_1.0.tar.gz,即为我们所需要的R包。
在Rstudio的控制台中输入:
install.packages("C:/Users/Administrator/hello_1.0.tar.gz", repos = NULL, type = "source")
回显信息如下,R包成功安装。
* installing *source* package 'hello' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (hello)
调用生成的R包进行测试,运行结果如下:
> library(hello)
> hello("world")
[1] "Hello world