admin 发表于 2015-8-16 15:15:20

编写R程序包通常包括的步骤


如何在windows中创建R程序包?

张金龙jinlongzhang01@gmail.com2010年5月9日修订

在Windows环境下如何编写R程序包,即生成供linux环境编译运行的tar.gz文件,也生成供windows下使用的.zip文件呢?其实并不复杂,只要下载一些工具软件,按照相应的步骤填写相应的“表格”,继而运行一些简单的指令,就可以生成R的程序包了。


       (1)工具软件Rtools的安装和备选软件的安装。
  (2)   r脚本的准备,也就是用来生成程序包的函数脚本。
  (3)   利用R中自带的package.skeleton()函数,生成制作包所需要的Description 文件和帮助文件帮助文件.rd。
  (4)   编辑该函数生成的Description 文件和帮助文件.rd
  (5)   在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz
  下面我们来一起建立只有一个函数的R程序包,来详细说明:
  一 工具软件安装和配置
  制作r包的工具软件包括Rtools,HTML编译器(R2.10后不需要HTML编译器),MikTeX 或 Ctex (备选软件不一定要安装):
  1 工具软件安装
  (1)Rtools(制作R包的主要工具)
  Rtools是在windows下制作R包的一系列工具,其中包括
  1)CYGWIN 在Windows下模拟UNIX环境
  2)MinGW编译器,可用来编译C和Fortran语言。
  3)Perl
  下载地址:
  
http://s.pc.qq.com/discuz/image/transparent.gif
  http://www.murdoch-sutherland.com/Rtools/
  (2) 微软HTML编译器(备选):
  用来从源文件生成HTML格式的帮助文件(2.10以后的版本则不需要)
  下载地址:
  http://go.microsoft.com/fwlink/?LinkId=14188
  (3) MikTeX 或CteX(备选)
  用来生成PDF格式的帮助文件
  下载地址:
  http://www.miktex.org/
  www.ctex.org/
  分别按照要求安装好。
  2 设置文件启动路径:设置启动路径的目的是在cmd命令行可以直接调用Rtools。右键点击:
  我的电脑属性高级环境变量系统变量PATH一项,点击“编辑”,检查是否具有以下路径,如果没有,需要手工添加:
  c:\uRtools\bin;c:\uRtools\uperl\bin;c:\uRtools\uMinGW\bin; C:\uCTEX\uMiKTeX\umiktex\bin;C:\uCTEX\uCTeX\uctex\bin;C:\uCTEX\uCTeX\cct\bin;C:\uCTEX\uCTeX\ty\bin;C:\uCTEX\uGhostscript\gs8.64\bin;C:\uCTEX\uGSview\ugsview;C:\uCTEX\uWinEdt;C:\uProgram Files\R\R-2.9.0\bin\;
  二 R脚本的准备
  假如现在我们已经有了一个编好的R函数linmod,用来给出回归的精确结果,存成了r脚本的格式,文件名为linmod.r
  其内容如下所示,那么该如何制作R程序包呢?
  linmod- function(x, y)
  {
  qx - qr(x)
  coef - solve.qr(qx, y)
  df - nrow(x)-ncol(x)
  sigma2 - sum((y - x%*%coef)^2)/df
  vcov - sigma2 * chol2inv(qx$qr)
  colnames(vcov) - rownames(vcov) - colnames(x)
  list(coefficients = coef,
  vcov = vcov,
  sigma = sqrt(sigma2),
  df = df)
  }
  三 R包框架的准备
  1 生成准备文件
  登陆R :开始所有程序RR.2.9.0
  (1)清除内存中的对象: rm(list=ls())
  (2)设定工作目录,这里设定为 c:/pa
  setwd(c:/pa)
  (3)将制作包的源文件 linmod.r拷贝到c:/pa/文件夹下,
  之后输入:(注R工作界面最好是英文,中文有时候会出错)
  package.skeleton(name=linmod,code_files=c:/pa/linmod.r)
  此时,R控制台中显示
  Creating directories ...
  Creating DESCRIPTION ...
  Creating Read-and-delete-me ...
  Saving functions and data ...
  Making help files ...
  Done.
  Further steps are described in './linmod/Read-and-delete-me'.
  可以看到c:/pa文件夹下新出现了一个linmod文件夹
  该文件夹下的内容就是R包的框架,包括data文件夹,man文件夹,只要按要求将其填写完整,再进行相应的编译即可。
  首先查看Read-and-delete-me文件
  文件内容如下:################################################################
  * Edit the help file skeletons in 'man', possibly combining help
  files for multiple functions.
  * Put any C/C++/Fortran code in 'src'.
  * If you have compiled code, add a .First.lib() function in 'R' to
  load the shared library.
  * Run R CMD build to build the package tarball.
  * Run R CMD check to check the package tarball.
  Read Writing R Extensions for more information.####################################################################
  大致意思如下:
  可以man文件夹下编辑帮助文件
  C/C++/Fortran 的源代码应该放入src文件夹下
  需要在登录时载入包
  可以运行R CMD建立和检查相应的包注:这里的R CMD说的是在Linux的终端输入的命令,实际上在Windows环境中应该输入 Rcmd build packname 给源程序打包,Rcmd build --binary packname建立zip包。Rcmd check packname 检查程序包的错误。
  更多信息,应该阅读Writing R Extensions
  2 编辑Description文件和rd文件
  (1) Description文件的编辑
  按照提示,填好各项
  Description文件是该程序包的简介,这一格式是Debian Linux的作者发明的。内容如下:
  ####################################
  Package: linmod
  Type: Package
  Title: test for linear regression
  Version: 1.0
  Date: 2009-07-20
  Author: helixcn
  Maintainer: helixcn
  Description: To give the exactly results of linear regression.
  License: GNU 2 or later
  LazyLoad: yes
  #####################################
  (2)man文件夹中.rd文件编辑
  man文件夹中包含两个文件 linmod.Rd和linmod-package.Rd,分别是对linmod()函数和linmod包的介绍,下面逐项填写:
  1) linmod.RdRd文件的格式与Tex的格式很像,如果有LaTex的基础,则会毫不费力。如果没有,则需要仔细琢磨一下了。#################################################################
  ame{linmod}
  \uRdversion{1.1}
  \ualias{linmod}
  %- Also NEED an '\ualias' for EACH other topic documented here.
  \utitle{
  linear regression
  }
  \udescription{
  to give the more exactly results of linear regression
  }
  %usage{
  linmod(x, y)
  }
  \uarguments{
  \uitem{x}{
  a numeric design matrix for the model
  }
  \uitem{y}{
  a numeric vector of responses
  }
  }
  \udetails{
  }
  \ureferences{
  Friedrich Leisch,2008 Creating R Packages: A Tutorial
  }
  \uauthor{
  helixcn
  }
  ote{
  Please read Friedrich Leisch,2008
  }
  \uexamples{data(cats, package=MASS)
  mod1 - linmod(Hwt~Bwt*Sex, data=cats)
  mod1
  summary(mod1)}
  \ukeyword{ ~kwd1 }
  \ukeyword{ ~kwd2 }% __ONLY ONE__ keyword per line
  ###########################################################
  2)linmod-package.Rd##########################################################
  ame{linmod-package}
  \uRdversion{1.1}
  \ualias{linmod-package}
  \ualias{linmod}
  \udocType{package}
  \utitle{Linear Regression Modification}
  \udescription{to Give the more exactly output of linear regression rather than R default}
  \udetails{
  \utabular{ll}{
  Package: \tab linmod\cr
  Type: \tab Package\cr
  Version: \tab 1.0\cr
  Date: \tab 2009-07-20\cr
  License: \tab GNU 2.0 or later\cr
  LazyLoad: \tab yes\cr
  }
  }
  \uauthor{helixcn
  Maintainer: helixcn }
  \ureferences{
  Friedrich Leisch,2008,Creating R Packages: A Tutorial
  }
  \useealso{lm}
  \uexamples{
  data(cats, package=MASS)
  mod1 - linmod(Hwt~Bwt*Sex, data=cats)
  mod1
  summary(mod1)
  }
  ######################################################################注意:在Rd文件中,不要出现ASCII码以外的内容,否在在Rcmd check中将不能通过。
  四 通过cmd创建R包在Windows下
  开始运行cmd
  键入 cd c:\pa\ 将工作目录转移到c:/pa下
  键入 Rcmd build --binary linmod制作window zip包
  键入 Rcmd build linmod制作linux平台下可运行的tar.gz包命令运行完之后可以发现,在c:/pa/文件夹下分别生成了linmod.zip和linmod.tar.gz压缩包。键入 Rcmd check linmod 对linmod程序包源代码中的各项内容进行检查。键入 Rcmd Rd2pdf linmod 生成pdf格式的命令手册。如果作者希望将自己制作的Package上传到CRAN,则必须要通过Rcmd check,并且其中不能有任何错误或警告。
  参考网址
  
  http://www.robjhyndman.com/researchtips/building-r-packages-for-windows
  
  http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf
  
  http://www.biostat.uni-hannover.de/teaching/fallstudien/schaarschmidt2.pdf

本文引用地址:
  http://www.sciencenet.cn/blog/user_content.aspx?id=247614
页: [1]
查看完整版本: 编写R程序包通常包括的步骤