使用RStudio结合devtools开发bioconductor扩展包

在之前的博文如何创建一个R扩展包, 以及R扩展包的写作规范对如何写R扩展包有了初步的介绍。但是当我们需要开发大型的扩展包的时候,完全依靠之前的介绍会让人觉得有些力不从心。并且在扩展包提交给bioconductor之后的2次或者3次开发也并不是那么容易。为此,本文进一步介绍如何使用RStudio结合devtools来开发及维护bioconductor扩展包。

事前依照之前的博文准备好helloWord.R文件,内容如下

helloworld<-function(n){
    for(i in 1:n)
    	cat("hello world!\n")
}

下载安装并打开RStudio, 在Project菜单下点击Create Project,跳出对话框,我们按照下图填写。
createNew
点击Create Project按钮之后,RStudio会自动调用package.skeleton生成所需要的文件。这时我们可以从右手边的Files子框中看到已经生成的所有文件。
Screen Shot 2013-06-21 at 3.27.28 PM

修改man下的helloworld.Rd以及helloWorld-package.Rd文件中的必要部分。打开hellowworld.Rd,修改title 及description

\title{
Hello World
}
\description{
Hello World
}

打开helloWorld-package.Rd,修改examples为

\examples{
helloworld(2)
}

之后点击右上角的Build的子框下的Check按钮,对包进行检查。会显示一些warning,但仍然可以通过。

如果你是第一次写这个扩展包,而且包的名称是不与任何一个已经发表的包重复的话,那么你不用担心它的安装会给你带来任何麻烦,你可以直接点击Build子框下的Build & Reload按钮来安装并试用它了。但是这里,我们提倡使用devtools的dev模式来对包进行安装。在dev模式下,包会安装至当前用户的家目录的R-dev目录下,所以不会对任何已经安装的包造成影响,这是非常理想的开发环境。所以我们需要安装并使用devtools。

> library(BiocInstaller)
Bioconductor version 2.12 (BiocInstaller 1.10.2), ?biocLite for help
> biocLite("devtools")
> library(devtools)

这时我们使用dev_mode()来调用开发模式,并在开发模式下安装helloWorld包

> dev_mode()
Dev mode: ON
d> getwd()
[1] "/qiuworld.com/qiuworld/helloWorld"
d> install()
Installing helloWorld
'/Library/Frameworks/R.framework/Resources/bin/R' --vanilla CMD INSTALL  \
  '/qiuworld.com/qiuworld/helloWorld'  \
  --library='/Users/qiuworld/R-dev' --with-keep.source 
 
* installing *source* package 'helloWorld' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (helloWorld)
d> library(helloWorld)
d> helloworld(2)
hello world!
hello world!

我们查看R-dev目录,发现helloWorld的确是安装在其中。

qiuworld.com:~ qiuworld$ cd R-dev
qiuworld.com:R-dev qiuworld$ ls -lah helloWorld
total 24
drwxr-xr-x  9 qiuworld  staff   306B Jun 21 15:55 .
drwxr-xr-x  4 qiuworld  staff   136B Jun 21 15:55 ..
-rw-r--r--  1 qiuworld  staff   331B Jun 21 15:55 DESCRIPTION
-rw-r--r--  1 qiuworld  staff   139B Jun 21 15:55 INDEX
drwxr-xr-x  7 qiuworld  staff   238B Jun 21 15:55 Meta
-rw-r--r--  1 qiuworld  staff    31B Jun 21 15:55 NAMESPACE
drwxr-xr-x  5 qiuworld  staff   170B Jun 21 15:55 R
drwxr-xr-x  7 qiuworld  staff   238B Jun 21 15:55 help
drwxr-xr-x  4 qiuworld  staff   136B Jun 21 15:55 html

当我们关闭开发模式后,再调用helloWorld会发现它不在默认的package目录中。

d> dev_mode()
Dev mode: OFF
> detach("package:helloWorld", unload=T)
> library(helloWorld)
Error in library(helloWorld) : there is no package called ‘helloWorld’

如果我们此时需要新建一个R文件,只需要在R目录中新建R文件,同时在man中建立新的帮助Rd文件即可。
除此之外,我们还需要依照如何创建一个R扩展包中描述完成细节。
更多的关于devtools,可以使用?devtools获得帮助。

Leave a Reply

  

  

  

%d 博主赞过: