说到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更多技能,请关注私信小编获取~