摘自 方匡南 等编著《R数据分析-方法与案例详解》.电子工业出版社

R包简介

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包的使用许可

包的命名空间NAMESPACE是R包管理包内对象的一个途径,它可以帮助R包的作者控制保内的哪些函数对象是对用户可见的,哪些对象是从别的包导入(import),哪些对象从包中导出(export)。当我们在写一个R包时,有时候会涉及到许多函数,但是其中一些函数可能只是为了方便其它函数的编写而被抽象独立出来的子函数,这些子函数只需要被R包中的其他函数调用,对于外界用户而言并没有什么帮助,因此它们不需要对外界用户可见。NAMESPACE文件就提供了这样一个功能,我们可以通过在包的根目录下创建一个NAMESPACE文件,通过写上`export(函数名)`来导出那些需要对用户可见的函数。自R 2.14.0开始,所有的R包都必须有命名空间,如果没有的话,R也会自动创建。
R文件夹下存放的是R包中所涉及到的,以.r格式保存的函数源文件。
man文件夹下存放的是Rd文件,也就是R帮助的源代码,一般情况下,R会自动创建与R目录下的函数对应的.Rd文件以及一个额外的用以描述整个R包情况xxx-Package.Rd文件。
18.2         在windows中制作R包
(1)        制作R包前的R环境配置
首先确保正确安装R软件,RGUI或者Rstudio,注意安装路径以及软件语言最好选择英文以避免可能因为语言出现的错误。
目前最新版本的RGUI为R-3.0.2,RGUI的下载地址为(厦门大学镜像):
http://mirrors.xmu.edu.cn/CRAN/bin/windows/base/
目前最新版本的Rstudio为RStudio v0.98,下载地址为:
http://www.rstudio.com/ide/download/
而制作R包的工具软件主要有Rtools,MikTeX或Ctex (如果不需要pdf的帮助手册,则不需要安装)
其中,Rtools是制作R包最重要也是最主要的工具,Rtools包含了windows环境下制作R包的一系列工具,其中包括:
1.        CYGWIN,用以在windows环境模拟UNIX环境。
2.        MinGW编译器,用以编译C和Fortran语言。
3.        Perl编译器,用以编译Perl语言。
最新版本的Rtools的下载地址为(厦门大学镜像):
http://mirrors.xmu.edu.cn/CRAN/bin/windows/Rtools/
在完成上述软件的安装后,我们需要对文件的启动路径进行设置从而使得可以通过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-3.0.2\bin\;

在完成上述步骤之后,打开cmd命令行窗口,输入R cmd –help 以检测R环境是否成功配置,正确配置后返回的结果如下图所示:

(2)        制作R包前的R环境配置
在Windows下编写R程序包通常包括以下几步:
1.        编写.r函数源代码,也就是用来生成R程序包的函数脚本。
在本文的演示中,假如现在我们已经有了一个编好的R函数Hello,用来在屏幕上输出问候:
hello<-function(name)
{
                       print(paste("Hello",name))
}
存成了r脚本的格式,文件名为Hello.r
2.        利用R软件自带的package.skeleton()函数,生成R包中的Description 文件和帮助文件.rd。
运行的代码为:
rm(list=ls())       
#清空R工作内存
setwd("D:/R-Pkg-Produce")    
#设定R软件“工作目录”,即R包的生成目录,但需要提前在路径建立对应的文件夹
package.skeleton(name="hello",code_files="D:/R-Pkg-Produce/hello.r")
#将待打包函数装载进工作内存,构建R包文件结构,生成相应的文件夹及其下面的文件,软件包名为"hello",文件是“hello.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)

特别地,在Rstudio这一R语言的IDE( Integrated Development Environment,集成开发环境)中,Rstudio提供了完全可视化的R包制作接口,上述的R包描述性文件均可在Rstudio中直接编辑。
4.在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz,并进行相应的检查。
打开Cmd窗口:<开始>\<运行>\<Cmd>
首先输入:cd D:/R-Pkg-Produce   #其目的是将工作目录更改至先前设定的R包路径下
再输入:R CMD check D:/R-Pkg-Produce/hello   #检查r包hello
执行结果如下:

最后输入:R CMD build D:/R-Pkg-Produce/hello
运行成功后显示如下信息:

将在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

如何制作自己的R包?的更多相关文章

  1. 如何制作自己的R包

    如何制作自己的R包? 摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这 ...

  2. 原创:R包制作--windows

    1.下载安装Rtools,添加环境变量: 打开R,分别输入下面指令,看有无包错: system('g++ -v') system('where make') 2.package.skeleton()函 ...

  3. R 包

    [下面列出每个步骤最有用的一些R包] .数据导入 以下R包主要用于数据导入和保存数据: feather:一种快速,轻量级的文件格式:在R和python上都可使用 readr:实现表格数据的快速导入 r ...

  4. 开发自己的R包(转)

    R不必说,数据统计分析可视化的必备语言,R包开发的门槛比较低,所以现在随便一篇文章都会发表一个自己的R包,这样有好处(各种需求早有人帮你解决了)也有坏处(R包太多,混乱,新手上手较难).作为生信工程师 ...

  5. 二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包

    1.Subversion基本操作 web1 1.1 安装Subversion服务器 ]# yum -y install subversion 1.1.1 创建版本库 ]# mkdir /var/svn ...

  6. 高级运维(七):Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包

    一.Subversion基本操作 目标: 本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件: 1> 创建版本库    2> 导入初始化数据    3> 检出 ...

  7. 普通用户安装 R 包

    转自 http://bnuzhutao.cn/archives/901 一般 R 语言的书籍上,介绍安装 R 包的方法都是这样的: install.packages("packagename ...

  8. R包介绍

    R语言的使用,很大程度上是借助各种各样的R包的辅助,从某种程度上讲,R包就是针对于R的插件,不同的插件满足不同的需求,截至2013年3月6日,CRAN已经收录了各类包4338个. 一. R语言包的安装 ...

  9. R(三): R包原理及安装

    包(package)是多个函数的集合,常作为分享代码的基本单元,代码封装成包可以方便其他用户使用.越来越多的R包正在由世界上不同的人所创建并分发,这些分发的R包,可以从CRAN 或 github 上获 ...

随机推荐

  1. java7(3)——增强的catch之自动释放资源

    跟mutilcatch一样,java7提供了自动释放资源的方法,但还是很少看到人使用,估计是麻烦去重写close方法.不过jdk内部一些类已经改成使用增强的catch来释放资源的写法,所以我们有必要了 ...

  2. 简明python教程八----输入/输出

    通过创建一个file类的对象来打开一个文件,分别使用file类的read.readline或write方法来读写文件. 最后调用一个close方法来告诉Python我们完成了对文件的使用. poem= ...

  3. CentOS 7 安装vsftpd 服务器

    在CentOS7上安装ftp服务器用于保存服务端上传的图片. 1.CentOS卸载vsftpd的方法 如果服务器上已经安装了vsftpd服务,配置出错需要卸载vsftpd服务. 1.1 查找vsftp ...

  4. 怎么将linux下的项目转换成windows的VS2010下的项目?

    怎么将linux下的项目转换成windows的VS2010下的项目?             不显示删除回复             显示所有回复             显示星级回复        ...

  5. 斐迅面试记录—Http协议中的Header

    HTTP Request的Header信息 1.HTTP请求方式 如下表: 说明:  主要使用到“GET”和“POST”. 实例: POST /test/tupian/cm HTTP/1.1 分成三部 ...

  6. RabbitMQ、Memcache、Redis RabbitMQ

    RabbitMQ 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是一种基于网络的消息传输协议,它能够在应用或组织之 ...

  7. iClap专访:颠覆传统办公方式,规范化产品管理系统

    背景:DevStore是成立于2014年的移动互联网企业运营解决方案整合平台,线上资源涉及产品研发,设计,推广运维各个阶段,致力于为互联网从业者提供帮助.iClap是DevStore的全新产品,于20 ...

  8. 【GZAdmin】开源BS demo快速搭建

    下载搭建项目:链接:https://pan.baidu.com/s/1jHZ3Kkm 密码:5k4q 项目源码: GZAdmin_API:https://github.com/GarsonZhang/ ...

  9. 根据iframe获取window

    今天使用layui弹出窗口,需要将函数写在弹出的窗口,但是按钮事件是在父层窗口绑定的,这样就要在父层窗口调用子层窗口的函数. 子层函数与父层函数 function topup() { console. ...

  10. WCF服务类的实例模式(本文为转载)

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...