见我的博客。希望对初学者会有用,老手可以忽略。因为以前被那个<Writing R extensions>搞得一头雾水才想到要写一个简单版的,降低入门门槛。
http://www.wentrue.net/blog/?p=395
原文如下:
R package的最简单制作
R的强大之处在于它包罗万有的包,几乎任何领域都可以从CRAN里找到你所需要的实现。
如果有一些功能你希望自己来实现,又或者是用别人的包用多了,希望自己做一个,那么这是一个简单的向导。可以告诉你怎么去制作一个最简单的R包,如果你需要用到复杂的功能,可以再深入地查看资料,我以后也会根据自己的实践深入写一写。
其实最原始最详尽的R包制作指南应该是官方文档<Writing R extensions>,但看过的人无一不觉得这是个累赘,它面面俱到地说了所有的事情,但令初学制作者无所适从。那么,摒弃里面的大部分内容,你真正需要的东西是这样的(以下说明基于linux平台,windows用户也可参考):
* 准备工作
1. 指定两个目录,一个是工作目录mydir(/home/wentrue/work),一个是包目录mylib(如/home/wentrue/Rlibs)。前者是你写R代码、运行R console的地方,后者是安装包的地方。
2. 默认情况下在mydir是找不到mylib下的包的,因为mylib不在包的搜索路径里,解决这个问题只需要在mydir新建一个文件.Rprofile文件,里面写上:.libPaths(”/home/wentrue/Rlibs”)即可。这样在mydir运行R脚本或启动R终端,mylib就会被添加到包搜索路径中。
* 添加目录与文件
1. 在mydir新建一个目录,名为once,作为包名。然后生成一些目录,目录树结构见下:
$ tree once
once
|– DESCRIPTION
|– R
| |– test.R
| `– zzz.R
|– data
|– man
`– src
2. 目录说明:必需的是DESCRIPTION文件、man目录和R目录,剩下的都是可选的。DESCRIPTION文件描述包的meta信息,后面会有一个附例;R目录下面存放R脚本文件,里面的函数可导出作为包函数库提供给外部使用;如果要在包里放一些试验数据,可以放在 data目录里,常用是以csv格式存放,在R终端里data(***)可以载入,这里留空;man目录是R的帮助文档,即?xxx时显示的那些,有一定的格式要求,这里也留空;src存放c/c++/fortran源代码,必须同时放置Makefile或Makevars文件指导编译程序工作,这里留空。
3. 作为试验,我在test.R里写了一个简单的函数,内容见下,里面的oncetest函数在once被装载时就可以被R直接调用。
oncetest <- function(x, y)
{
return(x*y)
}
4. zzz.R可以在载入包时做一些事情,这里留空。
5. 一个简单的包就这样做好了,是不是很简单。如果有其它需要,只要往R目录或src目录添加文件就可以了。
* 安装与试验(以下步骤都在mydir目录进行)
1. 运行R CMD check once,R会检查包看是否能正确安装(并未实际安装),如果不成功会返回ERROR,并有出错信息。这个实验里会有一些warning,是因为一些目录留空的缘故,不用管它。
2. 运行R CMD build once,会生成一个once_0.1.tar.gz安装包,其中的数字是我在DESCRIPTION里写的版本号。
3. 运行R CMD INSTALL -l /home/wentrue/Rlibs once_0.1.tar.gz,就可以把包安装到mylib里。
4. 运行R,进入R终端;library(once),载入刚制作的包;search(),可以看到once已经被载入。
5. 在R终端运行oncetest(2,3),返回6,试验成功。
附:我的DESCRIPTION文件内容
Package: once
Version: 0.1
Date: 2009-07-31
Title: Once Test
Author: Guozhu Wen <xxx@gmail.com>
Maintainer: Guozhu Wen <xxx@gmail.com>
Depends: R (>= 1.9.0)
Description: A Once Test Description
License: GPL version 2 or later
参考:http://www.maths.bris.ac.uk/~maman/computerstuff/Rhelp/Rpackages.html
补充:最典型的一个应用是,你已经积累下来一批自己写的常用的R函数,但又不想每次都一个个文件source进来,那么,把它们分类做成package吧,就可以像平常用其它package一样使用这些函数了,发布给别人用也方便得多。
转载请保留本文原始链接:http://www.wentrue.net/blog/?p=395
http://www.wentrue.net/blog/?p=395
原文如下:
R package的最简单制作
R的强大之处在于它包罗万有的包,几乎任何领域都可以从CRAN里找到你所需要的实现。
如果有一些功能你希望自己来实现,又或者是用别人的包用多了,希望自己做一个,那么这是一个简单的向导。可以告诉你怎么去制作一个最简单的R包,如果你需要用到复杂的功能,可以再深入地查看资料,我以后也会根据自己的实践深入写一写。
其实最原始最详尽的R包制作指南应该是官方文档<Writing R extensions>,但看过的人无一不觉得这是个累赘,它面面俱到地说了所有的事情,但令初学制作者无所适从。那么,摒弃里面的大部分内容,你真正需要的东西是这样的(以下说明基于linux平台,windows用户也可参考):
* 准备工作
1. 指定两个目录,一个是工作目录mydir(/home/wentrue/work),一个是包目录mylib(如/home/wentrue/Rlibs)。前者是你写R代码、运行R console的地方,后者是安装包的地方。
2. 默认情况下在mydir是找不到mylib下的包的,因为mylib不在包的搜索路径里,解决这个问题只需要在mydir新建一个文件.Rprofile文件,里面写上:.libPaths(”/home/wentrue/Rlibs”)即可。这样在mydir运行R脚本或启动R终端,mylib就会被添加到包搜索路径中。
* 添加目录与文件
1. 在mydir新建一个目录,名为once,作为包名。然后生成一些目录,目录树结构见下:
$ tree once
once
|– DESCRIPTION
|– R
| |– test.R
| `– zzz.R
|– data
|– man
`– src
2. 目录说明:必需的是DESCRIPTION文件、man目录和R目录,剩下的都是可选的。DESCRIPTION文件描述包的meta信息,后面会有一个附例;R目录下面存放R脚本文件,里面的函数可导出作为包函数库提供给外部使用;如果要在包里放一些试验数据,可以放在 data目录里,常用是以csv格式存放,在R终端里data(***)可以载入,这里留空;man目录是R的帮助文档,即?xxx时显示的那些,有一定的格式要求,这里也留空;src存放c/c++/fortran源代码,必须同时放置Makefile或Makevars文件指导编译程序工作,这里留空。
3. 作为试验,我在test.R里写了一个简单的函数,内容见下,里面的oncetest函数在once被装载时就可以被R直接调用。
oncetest <- function(x, y)
{
return(x*y)
}
4. zzz.R可以在载入包时做一些事情,这里留空。
5. 一个简单的包就这样做好了,是不是很简单。如果有其它需要,只要往R目录或src目录添加文件就可以了。
* 安装与试验(以下步骤都在mydir目录进行)
1. 运行R CMD check once,R会检查包看是否能正确安装(并未实际安装),如果不成功会返回ERROR,并有出错信息。这个实验里会有一些warning,是因为一些目录留空的缘故,不用管它。
2. 运行R CMD build once,会生成一个once_0.1.tar.gz安装包,其中的数字是我在DESCRIPTION里写的版本号。
3. 运行R CMD INSTALL -l /home/wentrue/Rlibs once_0.1.tar.gz,就可以把包安装到mylib里。
4. 运行R,进入R终端;library(once),载入刚制作的包;search(),可以看到once已经被载入。
5. 在R终端运行oncetest(2,3),返回6,试验成功。
附:我的DESCRIPTION文件内容
Package: once
Version: 0.1
Date: 2009-07-31
Title: Once Test
Author: Guozhu Wen <xxx@gmail.com>
Maintainer: Guozhu Wen <xxx@gmail.com>
Depends: R (>= 1.9.0)
Description: A Once Test Description
License: GPL version 2 or later
参考:http://www.maths.bris.ac.uk/~maman/computerstuff/Rhelp/Rpackages.html
补充:最典型的一个应用是,你已经积累下来一批自己写的常用的R函数,但又不想每次都一个个文件source进来,那么,把它们分类做成package吧,就可以像平常用其它package一样使用这些函数了,发布给别人用也方便得多。
转载请保留本文原始链接:http://www.wentrue.net/blog/?p=395