在之前的博文如何创建一个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,跳出对话框,我们按照下图填写。
点击Create Project按钮之后,RStudio会自动调用package.skeleton生成所需要的文件。这时我们可以从右手边的Files子框中看到已经生成的所有文件。
修改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获得帮助。