开发自己的R包(转)

R不必说,数据统计分析可视化的必备语言,R包开发的门槛比较低,所以现在随便一篇文章都会发表一个自己的R包,这样有好处(各种需求早有人帮你解决了)也有坏处(R包太多,混乱,新手上手较难)。作为生信工程师,日常就是查看别人写的R包,分析数据,然后借鉴、修改,根据自己的需求开发新的R包。

前言
R是一个世界范围开发者共同协作的产物,至2013年2月共计近5000个包可在互联网上自由下载。现在作为R的使用者,有朝一日也可以成为R的开发者,把我们自己的知识做成R包分享给世界。

今天我们简单介绍如何开发自己R包。

目录

  1. 系统环境

  2. vi中制作R包
  3. RStudio中制作R包

1. 系统环境

操作系统:Linux Ubuntu 12.04.2 LTS 64bit
R语言版本:R 3.0.1

~ uname -a
Linux conan-deskop 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

~ cat /etc/issue
Ubuntu 12.04.2 LTS \n \l

~ R --version
R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.

2. vi中制作R包

创建目录:/home/conan/R/demo

~ mkdir /home/conan/R/demo
~ cd /home/conan/R/demo

新建R脚本sayHello.R

~ vi sayHello.R
sayHello<-function(name){
    print(paste("Hello",name))
}

自定义一个sayHello的函数,将作为自定义包的第一个函数。

启动R程序

~ R

#清空变量设置工作目录
rm(list=ls())
setwd("/home/conan/R/demo")

#通过sayHello的脚本生成开发包的骨架
package.skeleton(name="sayHello",code_files="/home/conan/R/demo/sayHello.R")
Creating directories ...
Creating DESCRIPTION ...
Creating NAMESPACE ...
Creating Read-and-delete-me ...
Copying code files ...
Making help files ...
Done.
Further steps are described in ‘./sayHello/Read-and-delete-me‘.

#退出R的客户端
q()

在当前目录生成sayHello目录

~ ls -l
drwxrwxr-x 4 conan conan 4096  8月  1 15:07 sayHello
-rw-rw-r-- 1 conan conan   59  8月  1 15:04 sayHello.R

~ ls -l sayHello
-rw-rw-r-- 1 conan conan  281  8月  1 15:07 DESCRIPTION
drwxrwxr-x 2 conan conan 4096  8月  1 15:07 man
-rw-rw-r-- 1 conan conan   31  8月  1 15:07 NAMESPACE
drwxrwxr-x 2 conan conan 4096  8月  1 15:07 R
-rw-rw-r-- 1 conan conan  420  8月  1 15:07 Read-and-delete-me

~ ls -l sayHello/man
-rw-rw-r-- 1 conan conan 1043  8月  1 15:07 sayHello-package.Rd
-rw-rw-r-- 1 conan conan 1278  8月  1 15:07 sayHello.Rd

~ ls -l sayHello/R
-rw-rw-r-- 1 conan conan 59  8月  1 15:07 sayHello.R

文件及目录解释:

  • DESCRIPTION文件: 包描述文件

  • NAMESPACE文件: 包的命名空间文件
  • Read-and-delete-me文件: 说明文件,可以删除
  • man目录: 存放函数的说明文件的目录
  • R目录:存放源文件的目录
  • man/sayHello.Rd: sayHello函数的说明文件,latex语法,用来生成PDF文档
  • man/sayHello-package.Rd: sayHello包的说明文件,可以删除

编辑DESCRIPTION文件:

~ vi sayHello/DESCRIPTION
Package: sayHello
Type: Package
Title: R package demo for sayHello
LazyLoad: yes
Author: Dan Zhang
Maintainer: Dan Zhang
Description: This package provides a package demo
License: GPL
Version: 1.0
Date: 2013-07-31
Depends: R (>= 3.0.1)
</[email protected]>

编辑NAMESPACE文件:

~ vi sayHello/NAMESPACE
exportPattern("^[[:alpha:]]+")

编辑sayHello.Rd文件:

~ vi sayHello/man/sayHello.Rd
\name{sayHello}
\alias{sayHello}
\title{a sayHello function demo}
\description{
a sayHello function demo
}
\usage{
sayHello(name)
}
\arguments{
  \item{name}{a word}
}
\details{
nothing
}
\value{
no return
}
\references{
nothing
}
\author{
Dan Zhang
}
\note{
nothing
}
\seealso{
nothing
}
\examples{
sayHello("world")
}
\keyword{ sayHello }

删除文件:

~ rm sayHello/Read-and-delete-me
~ rm sayHello/man/sayHello-package.Rd

打包sayHello

~ R CMD build sayHello
* checking for file ‘sayHello/DESCRIPTION’ ... OK
* preparing ‘sayHello’:
* checking DESCRIPTION meta-information ... OK
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* building ‘sayHello_1.0.tar.gz’

~ ls -l
drwxrwxr-x 4 conan conan 4096  8月  1 15:22 sayHello
-rw-r--r-- 1 conan conan  663  8月  1 15:24 sayHello_1.0.tar.gz
-rw-rw-r-- 1 conan conan   59  8月  1 15:04 sayHello.R

本地安装sayHello

~ R CMD INSTALL sayHello_1.0.tar.gz
* installing to library ‘/home/conan/R/x86_64-pc-linux-gnu-library/3.0’
* installing *source* package ‘sayHello’ ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (sayHello)

~ ls /home/conan/R/x86_64-pc-linux-gnu-library/3.0
bitops  digest  manipulate  rstudio  sayHello  XML

sayHello包,已经在当前账号下进行安装

使用sayHello函数

~ R

library(sayHello)
sayHello("Conan")
[1] "Hello Conan"

#查看sayHello文档
?sayHello

sayHello               package:sayHello                R Documentation

a sayHello function demo

Description:
     a sayHello function demo
Usage:
     sayHello(name)
Arguments:
    name: a word
Details:
     nothing
Value:
     no return
Note:
     nothing
Author(s):
     Dan Zhang
References:
     nothing

我们包已经成功制作完成!并在本地进行安装和使用!!

检查R包
如果要提交R包和CRAN,必须要执行check检查。如果有任何的error和warning都将不被通过。

退出R的客户端,回到命令行

先安装latex的依赖包(500mb+)

~ sudo apt-get install texlive
~ sudo apt-get install texlive-xetex
~ sudo apt-get install texlive-latex-base
~ sudo apt-get install texlive-fonts-extra
~ sudo apt-get install texlive-latex-recommended
~ sudo apt-get install texlive-fonts-recommended

执行check

~ R CMD check sayHello_1.0.tar.gz

* using log directory ‘/home/conan/R/demo/sayHello.Rcheck’
* using R version 3.0.1 (2013-05-16)
* using platform: x86_64-pc-linux-gnu (64-bit)
* using session charset: UTF-8
* checking for file ‘sayHello/DESCRIPTION’ ... OK
* checking extension type ... Package
* this is package ‘sayHello’ version ‘1.0’
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for executable files ... OK
* checking for hidden files and directories ... OK
* checking for portable file names ... OK
* checking for sufficient/correct file permissions ... OK
* checking whether package ‘sayHello’ can be installed ... OK
* checking installed package size ... OK
* checking package directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking for left-over files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
* checking R files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* checking whether the package can be loaded ... OK
* checking whether the package can be loaded with stated dependencies ... OK
* checking whether the package can be unloaded cleanly ... OK
* checking whether the namespace can be loaded with stated dependencies ... OK
* checking whether the namespace can be unloaded cleanly ... OK
* checking loading without being on the library search path ... OK
* checking for unstated dependencies in R code ... OK
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
* checking R code for possible problems ... OK
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd cross-references ... OK
* checking for missing documentation entries ... OK
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
* checking Rd contents ... OK
* checking for unstated dependencies in examples ... OK
* checking examples ... OK
* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.
* checking PDF version of manual without hyperrefs or index ... OK

WARNING: There was 1 warning.
See
  ‘/home/conan/R/demo/sayHello.Rcheck/00check.log’
for details.

发现有一个警告,checking PDF version of manual ... WARNING。是latex生成pdf错误。

查检警告的debug日志

~ R CMD Rd2pdf sayHello_1.0.tar.gz
Converting Rd files to LaTeX ...
  sayHello_1.0.tar.gz
Warning in readLines(f) :
  incomplete final line found on ‘sayHello_1.0.tar.gz‘
Warning in parse_Rd("sayHello_1.0.tar.gz", encoding = "unknown", fragment = FALSE,  :
  sayHello_1.0.tar.gz:16: unexpected ‘}‘
Warning: sayHello_1.0.tar.gz:1: All text must be in a section
Warning: sayHello_1.0.tar.gz:2: All text must be in a section
Warning: sayHello_1.0.tar.gz:3: All text must be in a section
Warning: sayHello_1.0.tar.gz:4: All text must be in a section
Warning: sayHello_1.0.tar.gz:5: All text must be in a section
Warning: sayHello_1.0.tar.gz:6: All text must be in a section
Warning: sayHello_1.0.tar.gz:7: All text must be in a section
Warning: sayHello_1.0.tar.gz:8: All text must be in a section
Warning: sayHello_1.0.tar.gz:9: All text must be in a section
Warning: sayHello_1.0.tar.gz:10: All text must be in a section
Warning: sayHello_1.0.tar.gz:11: All text must be in a section
Warning: sayHello_1.0.tar.gz:12: All text must be in a section
Warning: sayHello_1.0.tar.gz:15: All text must be in a section
Error : sayHello_1.0.tar.gz: Sections \title, and \name must exist and be unique in Rd files

求助:
Error : sayHello_1.0.tar.gz: Sections \title, and \name must exist and be unique in Rd files
这个问题我检查了好多次始终没有解决。请求帮助!!

问题解决:安装完整包

sudo apt-get install texlive-full

上传R包
当解决了上面的WARN就可以上传了。。。(待续)

卸载R包

remove.packages("sayHello")
Removing package from ‘/home/conan/R/x86_64-pc-linux-gnu-library/3.0’

~ ls /home/conan/R/x86_64-pc-linux-gnu-library/3.0
bitops  digest  manipulate  rstudio  XML

3. RStudio中制作R包

RStudio Server的安装及配置,请参考:多人在线协作R开发RStudio Server

RStudio已经为我们准备了一个有界面的环境,方便我们制作R包。

  1. 创建一个工程sayHello

  2. 编辑DESCRIPTION
  3. 创建sayHello.R的脚本
  4. 编辑sayHello.Rd的文档

1). 创建一个工程sayHello
2). 编辑rstudio/sayHello/DESCRIPTION

Package: sayHello
Type: Package
Title: R package demo for sayHell
LazyLoad: yes
Author: Dan Zhang
Maintainer: Dan Zhang
Description: This package provides a package demo
License: GPL
Version: 1.0
Date: 2013-07-31
Depends: R (>= 3.0.1)
</[email protected]>

3). 编辑rstudio/sayHello/R/sayHello.R的脚本

sayHello<-function(name){
  print(paste("Hi",name))
}

4). 编辑rstudio/sayHello/man/sayHello.Rd的文档

\name{sayHello}
\alias{sayHello}
\title{a sayHello function demo}
\description{
a sayHello function demo
}
\usage{
sayHello(name)
}
\arguments{
  \item{name}{a word}
}
\details{
nothing
}
\value{
no return
}
\references{
nothing
}
\author{
Dan Zhang
}
\note{
nothing
}
\seealso{
nothing
}
\examples{
sayHello("world")
}
\keyword{ sayHello }

5). 执行build和reload
6). 执行check
在RStudio中可以更方便的进行R的开包,打包,检查等的过程。RStudio就是R的神器!

虽然还没有发布自己的R包,不过很快了!!有此想法已经多时了!!每一天加油!

转载请注明出处:
http://blog.fens.me/r-build-package/

时间: 2024-10-05 06:34:09

开发自己的R包(转)的相关文章

从Github上轻松安装R包—githubinstall包--转载

1.综述 越来越多的R包正在由世界上不同的人所创建,其中一部分原因是devtools包使得开发R包1变得更加简单.devtools包不仅让开发R包变得简单,而且用于分发R包. 当开发者发布一个R包的时候,CRAN2一般是最常用的.使用install.packages()函数可以安装发布在CRAN上的R包.例如,如下方法可以安装dplyr包: install.packages('dplyr') devtools包的install_github()函数用于从Github上安装R包. library(

R(三): R包原理及安装

包(package)是多个函数的集合,常作为分享代码的基本单元,代码封装成包可以方便其他用户使用.越来越多的R包正在由世界上不同的人所创建并分发,这些分发的R包,可以从CRAN 或 github 上获取,由于向 CRAN 提交包审核非常严格,有些开发者并没有将自己开发的R包提至CRAN的意向,通过 devtools 可以轻松从 github上下载安装.包的生命周期一般会经历 source.bundled.binary.installed和in-memory五个阶段.参考资料 (http://r-

如何创建R包并将其发布在 CRAN / GitHub 上--转载

转载--https://www.analyticsvidhya.com/blog/2017/03/create-packages-r-cran-github/ 什么是 R 包?我开始创建 R 包的原因是?创建包的好处和挑战必要条件开始创建你的第一个包发布包向CRAN 做贡献后的体验附加提示Additional resources 1. 什么是 R 包? R 包就是一个可重复使用的 R 函数,附带有关如何使用的标准.简要说明文档.有时,包还附带简单的数据. 直至今日,CRAN 上有 10000多个

Android开发中出现jar包重复

安卓开发中出现jar包重复,控制台会出现如下报错: 解决方案是: 可以查看自己项目工程下有没有重复,例如: 如果有重复,删除就可以了!

Android开发问题之R文件丢失

问题解析:1.有时候我们打开Android工程时,会发现gen文件夹下的R文件丢失了,这种情况的发生一般是发在在导入其他Android工程之后,原因是sdk版本问题:2.如果工程已经在eclipse软件中,可能是xml文件错误导致的. 解决方法:1.找到菜单栏中“项目”(project)选项下的“清理”(clean),然后在弹出的对话框中选择你要清理的工程:2.如果没有效果,可以选中项目名称,右击选择“源代码”->“清理”,确定完成.虽然两者都是清理操作,但感觉效果是不一样的:3.如果还是没有出

ML: 聚类算法R包-对比

测试验证环境 数据: 7w+ 条,数据结构如下图: > head(car.train) DV DC RV RC SOC HV LV HT LT Type TypeName 1 379 85.09 0.00 0.0 62.99 3.99 0.00 12 0 10f689e8-e6cc-47a3-be5a-dbc3833428ef EV200 2 379 85.09 370.89 59.9 63.99 4.01 0.00 12 0 10f689e8-e6cc-47a3-be5a-dbc3833428

R包的安装与载入

R包的安装与载入 R语言 包的安装 R自带了一系列默认包,包括 base.datasets .utils. grDevices.graphics .stats 以及methods,它们提供了种类繁多的默认函数和数据集.其他包可以通过下载来进行安装. 方法一:通过install.packages命令 install.packages("package_name") # 安装包 install.packages(c("package_name1", "pack

eclipse项目中丢失的R包找回方法

当我们项目中的R文件丢失的时候会令我们痛苦不已,怎样找回呢?总不能删了吧,那样心血会毁于一旦的,我们肯定不会那样做,那要怎么办呢?我这里提供三种方法: ?一,一般情况下这样: ?    ?方法一:选中项目clean一下: ?    ?方法二:选中项目然后右击找到Android Tool再Fix一下: ?二,第二种情况下: ?    ?1,找到你的xxx.xml文件,首先找到报错的,把错误改正过来,这样应该就可以了. ?    ?2,如果第一种方法不行,就把自己的xxx.xml文件都改动改动,然后

用?M?y?E?c?l?i?p?s?e? ?打?成?J?A?R?包

用?M?y?E?c?l?i?p?s?e? ?将自定义标签打?成?J?A?R?包 1.新建一个java工程 2.将标签有关的java代码复制到新建java工程的一个包中,这时会报错,不用管. 3.在该工程下新建一个META-INF目录,将标签的配置文件拷贝进去,到此准备工作完成 4.在工程名上右键,点击导出------>java------>jar文件------>next------>取消classpath和project------>选择jar文件的放置目录------&g