背景
实验室的服务器,操作系统:Ubuntu 16.04.6 LTS
生信里面很多包是基于R的,所以R不可不品尝。
根据我们的管理习惯,服务器上预装了R和一些基本的包,用户只需要在自己的目录下面安装一些额外要用的包就足够了。预装的R信息如下:
# R path
"/usr/bin/R"
# basic libraries
"/usr/local/lib/R/site-library"
"/usr/lib/R/site-library"
"/usr/lib/R/library"
版本为R version 4.2.0 (2022-04-22) -- "Vigorous Calisthenics"
。
第一次尝试
一切顺利的话很简单,在自己目录下建立lib文件夹并且加入环境变量:
# create lib dir
mkdir $HOME/R_lib
# add to libpath (write into ~/.*rc file)
export R_LIBS_USER="$HOME/R_lib:$R_LIBS_USER"
然后就可以快乐的进入R并且安装相应的包了,我安装了BiocManager,devtools以及单细胞分析最常用的Seurat。其中安装BiocManager和devtools的时候会要求更新,我都一律更新了(但是非必要,因为/usr
下预装的包很多,全部更新需要很久)
install.packages("BiocManager")
# update to R 4.2-compatible version
BiocManager::install(version="3.16")
install.packages("devtools")
install.packages("Seurat")
So long so good. 但是事情在我要用到nichenet
的时候发生了变化。这个包依赖于caret
,which做一些统计学习任务,是比较基本的包。这个包依赖clock
,which大概是一个更基本的包。然而它compile失败了。
仅使用Conda+R?
第二个方案是使用Conda配置R环境,详见Conda搭建R环境避坑指南. 简而言之,利用以下命令可以装好caret
:
conda create -n R4.2.0 -c conda-forge r-base=4.2.0 r-essentials
但是在这之上安装devtools
的尝试遇到了惨烈的失败,直接给我报了三十多个错ORZ。不靠谱!!
缝合怪or奇美拉:丑陋但是有用
最后选择把这两个lib缝合到一起。
export R_LIBS_USER="$HOME/miniconda3/envs/R4.2.0/lib/R/library:$R_LIBS_USER"
export R_LIBS_USER="$HOME/R_lib:$R_LIBS_USER"
work了!!!!
最后必须吐槽一句,R你语法反人类就算了,连安装都这么反人类,大量需要g++编译的包,就不能搞个binary release,或者至少学习一下pip wheel?