编写R程序包的步骤

编写R程序包的基本步骤和注意事项[简略版]

home         about         publication         guestbook         vitae         categories         tags         links         subscribe

本文已经过期,请参考统计之都上的最新文章:开发R程序包之忍者篇

这两天在忙着写一个R程序包“animation”,因此被迫得学习R包的基本写法,粗略看了看"Writing R Extensions"这本Manual,现提供大致步骤如下:

  1. 系统准备工作:对于Linux系统来说就基本没什么需要准备的了,但Windows用户必须首先安装一系列的“Windows Toolset”,详细情况参见"R Installation and Administration"的Appendix E;其中Rtools是必须的,但是为了能顺利编译LaTeX文档(帮助文件以及Vignette等),系统最好也装上MikTeX。安装这些软件的时候尽量按照默认目录安装,否则你必须明白“环境变量”是什么意思(主要是其中的PATH)。安装完成之后可以打开一个Command窗口(开始-->运行:cmd)测试一下,例如Linux下的命令ls等能否在Windows的Command窗口(类似Linux的“终端”)正常运行,ls命令类似Windows的dir命令;关于LaTeX,可以用latex -help测试是否可以正常运行。
  2. 装好软件之后如果上面的测试命令无法正常运行,那就得检查环境变量的PATH中是否包含相应的路径(有一些路径是在安装Rtools之后就会被自动添加的)。“我的电脑”-->“属性”-->“高级”-->“环境变量”-->“系统变量”-->PATH,这个里面应该包含诸如c:\Rtools\bin; c:\Rtools\perl\bin; c:\Rtools\MinGW\bin; 等一系列路径;为了R CMD INSTALL等命令能正常运行,C:\Program Files\R\bin 这样的路径也是应该包含在这里(取决于R安装在什么位置,这里是我安装的位置)。到这里基本的准备工作就够了。
  3. R自身提供了一个构建包的框架的函数:package.skeleton();这个函数对于写包来说非常方便,因为它会自动帮你把包的架子搭好,你要做的工作只是:写函数的源程序(.R)和帮助文档(.Rd);函数用法参见我这篇Blog“用R编写自己的Package”,主要是参考R帮助,自己看吧。需要注意的是path参数,否则构造了一个框架自己都找不着放到哪儿去了(如果不指定path参数,那么构造的框架放在getwd()下面)。打包的函数会把你的functions放在R文件夹下,把data(如数据框)放在data文件夹下。
  4. 包中的函数怎么写我就不说了。写好一系列函数(可能还有数据)之后,用package.skeleton()搭好架子,就可以在该文件夹下面开始修改、补充包的详细内容了。(1)DESCRIPTION文件,里面是关于你这个包的基本说明,包括版本、作者、版权、维护者、相关包等,里面需要看文档的可能只是Depends, Imports, Suggests, Enhances等那几项,稍有点费脑子;(2)帮助文档,这个在man文件夹下面,以Rd作为扩展名(R documentation),刚才的package.skeleton()函数已经把基本的项目都自动生成好了,我们需要把相应的内容填上,比如函数说明、参数说明、详细说明、返回值、示例、关键词(在R提供的关键词中选择)等。这些文本里面可以用链接\link{}、字体修饰\emph{} \code{}等,具体参见R-exts文档。
  5. 修改好了之后就可以开始编译了;打开一个Command窗口,cd到你的包源文件所在的文件夹,比如你的包写在C:\pkg这里,那么就cd C:\,然后用R CMD系列命令,如检查包是否有错误:R CMD check pkg;编译包:R CMD build pkg(需要编译为binary的话就加上相应选项--binary);安装包:R CMD install pkg;如果你的包有任何错误,在check的时候会给出提示。

这样一个R包就基本上完成了,build出来的*.tar.gz(或者binary形式的*.zip)就可以交给别人使用了(前提是check完全通过)。进一步可以为你的包写vignette,也就是PDF说明文档,类似一篇文章的形式。如果要写vignette的话,最好会用Sweave,这在R-exts中有相应的介绍,总体说来它的大致用途就是把LaTeX文档和R code结合起来,你可以在LaTeX文档中仅仅放R code,不必把code的输出(文本或者图形)事先准备好,Sweave文档在编译的时候会自动执行你的R代码生成相应的输出并插入到LaTeX文档中,这实在是太方便了——动态生成报告。Vignette文档(*.Rnw)放在包的inst/doc目录下,在build包的时候这个文档会被自动编译生成PDF(实际上是转换给LaTeX编译的),安装包的时候这个文档会被装到doc目录下。关于Sweave的用法也可以参见COS论坛上这篇帖子:http://cos.name/cn/topic/8434,momozilla对Emacs、ESS和Sweave比较熟悉,可以向他请教。

编写包的过程中不妨参考一下别人的源文件,看大概是怎么写的。

注意事项:

  1. 写代码的时候不要把TRUE/FALSE简写为T/F,虽然它们基本是等价的,但是这样写的话在编包的时候会给出警告和错误信息!我费了半天心思才琢磨明白这一点。
  2. 注意LaTeX语法,在写帮助文件的时候有些符号如下划线_是不能直接用的,因为LaTeX语法要求这样的字符必须由\引导。如果Rd文件不符合LaTeX语法,build的时候也会报错。之所以提到下划线,是因为package.skeleton()生成的数据文件的Rd文件中包含下划线(不知道是否应该给R Core写邮件说明一下),这些下划线应该删掉。
时间: 2024-10-10 07:49:10

编写R程序包的步骤的相关文章

在windows下编写R程序包

每个R的使用者总会遇到这样的问题,用R时间长了攒了几个自己写的函数需要经常调用,用source命令调用感觉不够方便,最好怎么办呢?编一个自己的包,只需安装一次就可多次调用,方便自己和他人使用.我把自己制作R包的步骤记了下来,主要参考了统计之都的一篇帖子(http://cos.name/cn/topic/15991)和<Creating R Packages: A Tutorial>中的部分内容,对一些过时的东西做了更正,以供大家参考吧. 在windows下编写R程序包

无法安装R程序包

如题,使用insatll.packages("cluster")安装包时,会出现如下错误提示. Warning: unable to access index for repository https://mirror.lzu.edu.cn/CRAN/src/contrib: cannot open URL 'https://mirror.lzu.edu.cn/CRAN/src/contrib/PACKAGES'Warning: unable to access index for r

如何安装所有的R程序包

# get names of installed packages packs <- installed.packages() exc <- names(packs[,'Package']) # get available package names av <- names(available.packages()[,1]) # create loooong string ins <- av[!av %in% exc] install.packages(ins)

Linux程序包管理之yum仓库、源码编译安装

CentOS:yum,dnf URL:ftp://172.16.0.1/pub yum是C/S架构,是rpm的前端工具,依赖于rpm存在的: 1.本地要有yun程序: 2.本地要有配置文件(配置远程服务器yum仓库或本地服务器yum仓库): 3.要有存在的文件服务器(程序包仓库即yum仓库).(也可以在本地配置服务器yum仓库): yum支持的服务器有两种:一种是ftp服务器,第二种是http服务器: yum工作简述: yum是客户端,也认为是自我独立管理的组件,需要联系远程的仓库,从仓库中下载

0729------Linux网络编程----------使用 select 、poll 和 epoll 模型 编写客户端程序

1.select 模型 1.1 select 函数原型如下,其中 nfds 表示的描述符的最大值加1(因为这里是左闭右开区间),中间三个参数分别表示要监听的不同类型描述符的集合,timeout用来表示轮询的时间间隔,这里用NULL表示无限等待. 1.2 使用 select函数编写客户端程序的一般步骤: a)初始化参数,包括初始化监听集合read_set并添加fd,以及初始化监听的最大描述符 maxfd 和select的返回值 nready: b)将read_set 赋值给 ready_set,因

源码编译安装程序包及httpd源码安装实践

源码编译安装程序包从步骤并不复杂,实际安装过程中最主要的就是准备好编译环境:根据自己的实际需求,选择或设置程序包编译参数:以及程序包安装后的相关配置. 1.  编译环境准备 以CentOS6为例,一般通过yum安装2个包组,编译工具,以及编译程序包依赖的主要的头文件和库文件就都准备好了. # yum groupinstall "Development Tools" # yum groupinstall "Server Platform Development" 另外

编写hadoop程序并打成jar包上传到hadoop集群运行

准备工作: 1. hadoop集群(我用的是hadoop-2.7.3版本),这里hadoop有两种:1是编译好的hadoop-2.7.3:2是源代码hadoop-2.7.3-src: 2. 自己的机器可以是任何系统,只要支持JVM,自己的主机上必须有eclipse,以及hadoop-2.7.3和hadoop-2.7.3-src.(我用的是windows系统,为了方便Linux系统传输数据,我选用了FileZilla,一款ftp工具,具体见www.cnblogs.com/NongSi-Net/p/

编写CGI程序步骤

CGI common gateway interface 可以让一个客户端,从网页浏览器向服务器请求数据, 这是描述客户端和服务器程序之间传输数据的一种标准. CGI是运行在服务器上的程序,提供同客户端HTML页面的接口,不限定使用语言 编写CGI程序步骤 创建目录 编写CGI程序 开启服务器 使用浏览器访问 原文地址:https://www.cnblogs.com/themost/p/8454654.html

Linux程序包管理及yum安装管理

Linux程序包管理: API:ApplicationProgramming Interface   应用编程接口 POSIX:Portable OS    遵循本协议的程序均可在不同系统间移植 程序编写完成后,执行所要经过的处理步骤: 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:直接调用.so共享对象实现 ABI:ApplicationBinary Interface  应用二进制接口 Windows与Linux所支持的可执行二进制