生信数据分析 有安装R包的终极方法吗? 方法解析

说到R包的安装简直是个噩梦,为什么R包这么难装呢?我大胆分析一下,欢迎批评指正:

生态混乱

R在统计圈的盛行决定了R包的开发人员基本上做统计的,这些开发者开发的包水平层次不齐。有 时候一个简单的功能却要依赖一个非常复杂的包,严重增加的包的负担。

很多包含有C代码需要编译

一方面需要安装编译器,另一方面有编译失败的风险。

错误提示不友好

例如,biomaRt安装说明说,可以使用R 3.6安装:

然而,错误提示却是:

安装失败的原因当然不是R版本的问题,这里却误导性的提示是R版本的问题。如果这个时候能给出 安装失败的真正原因,也能帮助用户快速定位问题。然而,事与愿违。

总结一下,R包难以安装的根本原因是生态混乱,错误提示不友好是阻碍用户找到失败原因的根本原因。

解决办法

我们总希望解决问题的时候有什么终极办法,然而对于R包的安装却是很难找到此类办法。下面我列举一下 我平时解决问题的基本思路,不能保证彻底解决问题,但是大多数的问题是能够解决的。

使用anaconda安装

这个方法最有希望成为终极解决办法。anaconda组织会把R包统一管理,你只需要使用conda install就行。 例如,你想要安装ArrayExpress,执行如下命令安装:

conda install -c bioconda bioconductor-arrayexpress

然而,事情不是总是难么顺利,也是很容易安装失败。

失败原因1:版本冲突

anaconda有三个重要的channel与R相关。

r

conda-forge

bioconda

其中bioconda里面都是bioconductor包,这个里面包。r、conda-forge里面都有一些R包, 这就很容易导致安装包时各个channel里面的包互相冲突。

失败原因2: conda install一下,地动山摇

不知道biconda的打包策略,有的时候安装一个R包却要更新我的Python。往往安装的时候我都心惊胆战, 生怕有啥不好的影响,一见到有更新Python的R包,往往只能采取其他方式安装。

下载二进制包安装

这个方法针对有些R包有C代码需要编译安装,却又不想安装编译器,或者没有编译成功的情况。方法是去CRAN官网, 找到你要安装的包,选择你要安装平台的二进制包下载:

然后本地安装:

install.packages("/path/to/download/file.zip", repos = NULL)

这里要注意,如果是本地安装需要指定repos = NULL。为啥要单独指定,R不会判断是本地文件路径还是包名吗? 这个问题我也很疑惑。

源码安装

这个安装方法是没有办法的办法。设想我就是这个包的开发者,我会怎么开发这个包呢?

写代码

装依赖

那么我下载这个包的源码,把这个包的依赖依次装上,然后再装这个包不是水到渠成吗?

这个方法最为麻烦,然而却是能解决大部分的情况。大体步骤是这样的:

下载源码

解压,进入项目根目录

像这个包的开发者一样,使用devtools::install()进行安装

如果安装失败,打开DESCRIPTION文件

逐一安装项目依赖,DESCRIPTION文件中Depends、Imports两项是项目依赖,例如:

这个包依赖Biobase、XML、oligo、limma。

6. 如果依赖包依旧安装错误,则下载依赖包的源码进行源码安装(这是一个递归),直到所有依赖安装成功, 这个时候再运行devtools::install()就水到渠成了。

get更多技能,请关注私信小编获取~

你可能感兴趣的:(生信数据分析 有安装R包的终极方法吗? 方法解析)