如何制作自己的R包
如何制作自己的R包?
摘自 方匡南 等编著《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数据分析-方法与案例详解》.电子工业出版社
如何制作自己的R包的更多相关文章
- 如何制作自己的R包?
摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的 ...
- 原创:R包制作--windows
1.下载安装Rtools,添加环境变量: 打开R,分别输入下面指令,看有无包错: system('g++ -v') system('where make') 2.package.skeleton()函 ...
- R 包
[下面列出每个步骤最有用的一些R包] .数据导入 以下R包主要用于数据导入和保存数据: feather:一种快速,轻量级的文件格式:在R和python上都可使用 readr:实现表格数据的快速导入 r ...
- 开发自己的R包(转)
R不必说,数据统计分析可视化的必备语言,R包开发的门槛比较低,所以现在随便一篇文章都会发表一个自己的R包,这样有好处(各种需求早有人帮你解决了)也有坏处(R包太多,混乱,新手上手较难).作为生信工程师 ...
- 二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
1.Subversion基本操作 web1 1.1 安装Subversion服务器 ]# yum -y install subversion 1.1.1 创建版本库 ]# mkdir /var/svn ...
- 高级运维(七):Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
一.Subversion基本操作 目标: 本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件: 1> 创建版本库 2> 导入初始化数据 3> 检出 ...
- 普通用户安装 R 包
转自 http://bnuzhutao.cn/archives/901 一般 R 语言的书籍上,介绍安装 R 包的方法都是这样的: install.packages("packagename ...
- R包介绍
R语言的使用,很大程度上是借助各种各样的R包的辅助,从某种程度上讲,R包就是针对于R的插件,不同的插件满足不同的需求,截至2013年3月6日,CRAN已经收录了各类包4338个. 一. R语言包的安装 ...
- R(三): R包原理及安装
包(package)是多个函数的集合,常作为分享代码的基本单元,代码封装成包可以方便其他用户使用.越来越多的R包正在由世界上不同的人所创建并分发,这些分发的R包,可以从CRAN 或 github 上获 ...
随机推荐
- Mybatis数据基本操作
<insert id="doCreate" parameterType="News"><!--添加数据--> INSERT INTO n ...
- Centos7环境下Docker容器的安装与卸载
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...
- Binding的简单使用
Binding可以看作是数据的桥梁,两端分别为Source和Target,一般情况,Source是逻辑层的对象,Target是UI层的控件对象,可以将数据从逻辑层送往UI层展现 简单的例子: clas ...
- Python 东方财富网-股市行情数据抓取
东方财富网 股市行情数据抓取: http://quote.eastmoney.com/center/gridlist.html#hs_a_board 请求数据未入库处理,其中数据只存入数据文本,未做存 ...
- Vue开发——实现吸顶效果
因为项目需求,最近开始转到微信公众号开发,接触到了Vue框架,这个效果的实现虽说是基于Vue框架下实现的,但是同样也可以借鉴到其他地方,原理都是一样的. 进入正题,先看下效果图: 其实js做这个效果还 ...
- 转载:ubuntu 下添加简单的开机自启动脚本
转自:https://www.cnblogs.com/downey-blog/p/10473939.html linux下添加简单的开机自启动脚本 在linux的使用过程中,我们经常会碰到需要将某个自 ...
- jenkins自动部署代码到多台服务器
下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...
- traceback:让你更加灵活地处理python的异常
异常 异常在python中是屡见不鲜了,程序在执行到某一行代码时,发现有问题,比如数组索引越界,变量没有定义啊等等,此时就会抛出异常 捕获异常 在python,一般都是使用try···except来对 ...
- zabbix 4 自带 php、httpd漏洞升级
Zabbix 自带的 PHP 5.4.apache httpd 2.4.6扫描出安全漏洞,需要进行升级. PHP # php -v PHP 5.4.16 (cli) (built: Apr 12 20 ...
- [全局最小割][Stoer-Wagner 算法] 无向图最小割
带有图片例子的 [BLOG] 复杂度是$(n ^ 3)$ HDU3691 // #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragm ...