R极简教程-5:包
来源:互联网 发布:内存稳定性测试软件 编辑:程序博客网 时间:2024/06/05 15:16
R包介绍
包可谓是R语言发展至今最重要的因素。包其实就是一个一个的函数脚本,安装了一个包以后,你就可以使用这个包里数据或者函数。R语言写起来很快,所以很多科学家再研究出新算法新工具之后,都会第一时间发布一个R版本的工具。所以R语言再科学界的地位很高。
大部分R包的安装方法很简单,就是一行代码:
install.package("XXX")
就可以完成安装,对于一些复杂的生物学方面的包,需要再Bioconductor网站上寻找,然后用Bioconductor的命令去安装。
我写的ChAMP包,和即将发布的EpiCluster包都在Biocondcutor上。^_^
但是值得注意的是,再有些时候,R之间的以来关系很复杂,如果需要安装一些很大很复杂的R包,你需要安装一系列的依赖软件,才能确保你要安装的软件可以顺利运行。
另外,包的更新换代非常频繁,有时候你发现自己的包和别人的运行效果不一样,可能的原因是你们的版本不同。
此外,一些很特殊的包需要其他一些语言和工具的支持,比如RJava包需要Java支持,RPostgreSQL需要PostgreSQL数据库支持,RSpark需要Spark支持等等……面对那些问题,最好参看相关的文档,找到解决办法。不过,再大多数时候,install.packages()可以解决大部分问题
包的开发
如果你到一定水平,就可以开发自己的R包,就算你不到一定水平,也可以尝试修改别人的R包。比如说,有些包要求的R语言版本是3.4,但是你安装的是3.3,你就可以直接下载包的原始文件,修改一下它的版本号,然后直接安装使用。
这些深入细节的问题,你知道的越多,越有利于你平时的工作。R中的一些包确实不太稳定,因为不是所有科学家都是优秀的程序员。能够自己修改程序,可以让大部分工作都更便捷。
举例说明,pheatmap这个包,这是我很喜欢的一个R包,小巧实用,专门用来绘制热图(不是地图上红一块绿一块那种热力图啊!)。
首先上网站找到pheatmap包的页面:
其中,第一个红框是有关于这个包的说明文档,第二个是原始的安装包,其中包含的就是一些脚本和说明文件。
我们点击第二个红框,将其下载下来,解压进入:
这就是一个包的内部文件,R文件夹下,是每一个函数脚本(必须是函数)。man文件夹是针对每一个函数的说明文档。其余的是一些描述等等。你可以修改这个文件夹下的文件,来改变它们的功能。
我们用Rstudio打开DESCRIPTION,修改一下版本号:
然后用RStudio再R文件夹下新增一个R文件,仿写pheatmap就行了:
就四行代码:
myboxplot <- function(){ print("This is myboxplot function.") boxplot(matrix(rnorm(1000,0,1),nrow=20))}
然后在man文件夹下新增一个Rd文件:
也没几行:
% Generated by roxygen2 (4.1.1): do not edit by hand% Please edit documentation in R/pheatmap.r\name{myboxplot}\alias{myboxplot}\title{a test function}\usage{myboxplot()}\examples{myboxplot()}\author{XXX}
最后修改一下NAMESPACE文件,再export中加入myboxplot这样就能再安装后使用:
这样,我们就已经再pheatmap包中增加了一个我们自己的函数myboxplot,然后我们u需要打包这个包:
再windows系统下打开cmd命令框(这里需要再之前的安装步骤中将R路径添加进入了环境变量),cd到包所在的目录下。
输入命令生成R包:
R CMD build pheatmap
然后可以看到这样的画面:
这意思就是,pheatmap_1.0.9.tar.gz包已经打包生成成功了。
然后我们可以安装这个包:点击RStudio上方的Tools按钮,选择这个tar.gz包,然后点击install就行了。
然后程序报错:
> install.packages("C:/Users/Yi/Desktop/pheatmap_1.0.8/pheatmap_1.0.9.tar.gz", repos = NULL, type = "source")Installing package into ‘C:/Users/Yi/Documents/R/win-library/3.4’(as ‘lib’ is unspecified)ERROR: dependencies 'RColorBrewer', 'scales', 'gtable' are not available for package 'pheatmap'* removing 'C:/Users/Yi/Documents/R/win-library/3.4/pheatmap'Warning in install.packages : running command '"C:/PROGRA~1/R/R-34~1.0/bin/x64/R" CMD INSTALL -l "C:\Users\Yi\Documents\R\win-library\3.4" "C:/Users/Yi/Desktop/pheatmap_1.0.8/pheatmap_1.0.9.tar.gz"' had status 1Warning in install.packages : installation of package ‘C:/Users/Yi/Desktop/pheatmap_1.0.8/pheatmap_1.0.9.tar.gz’ had non-zero exit status>
错误提示,缺少依赖包(’RColorBrewer’, ‘scales’, ‘gtable’):这不是我们的程序写出了问题,而是以来出错的。
如果你使用install.package()直接从互联网下载安装,那么如果你想要安装的包缺乏一些以来软件,R会自动帮你下载那些依赖包进行安装。但是如果你直接通过tar.gz文件进行安装,就不会帮助你自动下载依赖。
没关系,我们自己安装一下这些R包:
install.packages('RColorBrewer')install.packages('scales')install.packages('gtable')
在安装一些较大的R包的时候,有时候即使使用互联网安装也会出现一些dependence缺失的情况,那种情况一般是因为多级引用,比如A引用了B,B引用了C,但是A没有引用C等等一连串的问题……但是一般来说,安装过程中报什么错,你就安装什么包,这样循环下去就行了。
安装好那些依赖包以后,再次尝试安装,就成功了:
> install.packages("C:/Users/Yi/Desktop/pheatmap_1.0.8/pheatmap_1.0.9.tar.gz", repos = NULL, type = "source")Installing package into ‘C:/Users/Yi/Documents/R/win-library/3.4’(as ‘lib’ is unspecified)* installing *source* package 'pheatmap' ...** R** preparing package for lazy loading** help*** installing help indices** building package indices** testing if installed package can be loaded*** arch - i386*** arch - x64* DONE (pheatmap)>
然后,我们调用我们自己安装的这个包,试试我们写的函数能不能用?
library("pheatmap")myboxplot()
然后我们就可以看到,我们自己写的myboxplot()函数已经可以像其他函数一行调用安装了,你可以把这个R包传给其他朋友使用。但是,你没有权限去修改这个R包在网上的一行程序,因为毕竟它不是属于你的,只有R包的维护人有资格通过SVN去修改源代码。所以你写的R包只能自己使用或者传给别人安装。
总而言之,R包是很重要的一个部分,我们简单介绍了R包和其开发维护过程。
- R极简教程-5:包
- R包简单教程
- R极简教程-3:R及RStudio的安装
- R极简教程-4:R语言工作空间
- R极简教程-10:R语言绘图基础
- R极简教程-6:基本语法
- R极简教程-7:读取数据
- R极简教程-12:交互式绘图
- R包的安装教程以及myeclipse对R包的调用
- R:包
- R极简教程-1:数据分析前景
- R极简教程-2:常用挖掘工具介绍
- R极简教程-8:缺失值与异常值
- R极简教程-9:描述性统计分析
- R极简教程-11:高级绘图函数
- R极简教程-13:交互式网站Shiny框架
- R中的包
- R包开发
- 扩增子分析流程QIIME. 1 使用Docker配置QIIME
- 并查集详解 (转)
- 图片相关工具类
- ajax跨域遇到的问题
- [Leetcode] 232. Implement Queue using Stacks 解题报告
- R极简教程-5:包
- 【Storm初探】wordcount demo
- EL表达式中fn系列函数的应用
- HashMap之Java实现
- Express入门
- 走过的那些白痴的坑
- 验证码倒计时
- 8086/8088 寻址方式
- STM32堆栈