kikyo91的个人博客分享 http://blog.sciencenet.cn/u/kikyo91

博文

[转载]简单的R package制作教程

已有 3305 次阅读 2014-10-23 05:46 |个人分类:R|系统分类:科研笔记|关键词:R|文章来源:转载

转载于http://cos.name/cn/topic/15991


希望对初学者会有用,老手可以忽略。因为以前被那个<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://blog.sciencenet.cn/blog-517481-837884.html

上一篇:[转载]R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?
下一篇:[转载]向量的点积与叉积

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-12-6 13:12

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部