星期三, 九月 19, 2012

如何在WIN下写一个简单的R包


虽然玩了一段时间的R,但很惭愧的是一直没有学着自己编写一个R包。一个是觉得R本身的包已经是浩如烟海了,另一个感觉好象写包非常麻烦。在参加完北京的这次统计夏令营后,看太云讲写包也不是太难。于是回来找了些资料尝试了一下,于是就形成了这篇笔记。

在WIN下面除了要安装好R之外,还要安装Rtools,这个在官网上可以找到。如果不写复杂的帮助文档和Vignette的话也不需要装MikTeX。此外在WIN中还要确保PATH的设置正确,这些可以在后面的参考文献中得到详细说明。在编写R包时还要知道自己的工作目录在哪,可以用getwd()函数来了解。

在上面准备工作都做好之后,可以开始在R中编写自定义函数了。例如在前面文章中提到的判断质数的函数。在包里面我们还可以内置一些数据。也一起读到内存中来。
findprime  <- function(x) {
    if (x %in% c(2,3,5,7)) return(TRUE)
    if (x%%2 == 0 | x==1) return(FALSE)
    xsqrt <- round(sqrt(x))
    xseq <- seq(from=3,to=xsqrt,by=2)
    if (all(x %% xseq !=0)) return(TRUE)
    else return(FALSE)
}
number <- 1:1000
package.skeleton(name="mypkg", list=c("findprime","number"))
package.skeleton()是R自身提供的一个构建包的框架的函数。运行后在工作目录中就会有mypkg的子目录出现了。其中的DESCRIPTION为文本文档,是对包的整体描述。R目录中是函数代码文件,data目录中是内置的数据,man目录则是函数和数据的帮助文档。

如果你是个很重视细节的人,可以去补充完善DESCRIPTION文件和man目录下的rd文件。因为帮助文档如同代码中的注释一样重要。如果你不拘小节也应该将各个rd文档中的title补充好。这样才能继续往下走。有时候你也可以直接将别人的包拿过来修改一下,这也是省事的法子。

补充完整后,在命令行窗口中运行如下命令:
R CMD INSTALL --build mypkg

一切顺利的话就会在工作目录下看到mypkg.zip文件了。最后就可以用R来安装这个zip文件。使用这个包只要library(mypkg)就OK了。是不是很简单。

如果你要编写的R包只有几个简单的函数,就可以使用上面的传统方法来做。但如果有几十个函数要编写维护,那么写这些函数的帮助文档就非常让人头疼。此时你就需要用到忍者的写包方法了。

参考文档:

没有评论:

发表评论