說到R包的安裝簡(jiǎn)直是個(gè)噩夢(mèng),為什么R包這么難裝呢?我大膽分析一下,歡迎批評(píng)指正:
生態(tài)混亂
R在統(tǒng)計(jì)圈的盛行決定了R包的開發(fā)人員基本上做統(tǒng)計(jì)的,這些開發(fā)者開發(fā)的包水平層次不齊。有 時(shí)候一個(gè)簡(jiǎn)單的功能卻要依賴一個(gè)非常復(fù)雜的包,嚴(yán)重增加的包的負(fù)擔(dān)。
很多包含有C代碼需要編譯
一方面需要安裝編譯器,另一方面有編譯失敗的風(fēng)險(xiǎn)。
錯(cuò)誤提示不友好
例如,biomaRt安裝說明說,可以使用R 3.6安裝:
然而,錯(cuò)誤提示卻是:
安裝失敗的原因當(dāng)然不是R版本的問題,這里卻誤導(dǎo)性的提示是R版本的問題。如果這個(gè)時(shí)候能給出 安裝失敗的真正原因,也能幫助用戶快速定位問題。然而,事與愿違。
總結(jié)一下,R包難以安裝的根本原因是生態(tài)混亂,錯(cuò)誤提示不友好是阻礙用戶找到失敗原因的根本原因。
解決辦法
我們總希望解決問題的時(shí)候有什么終極辦法,然而對(duì)于R包的安裝卻是很難找到此類辦法。下面我列舉一下 我平時(shí)解決問題的基本思路,不能保證徹底解決問題,但是大多數(shù)的問題是能夠解決的。
使用anaconda安裝
這個(gè)方法最有希望成為終極解決辦法。anaconda組織會(huì)把R包統(tǒng)一管理,你只需要使用conda install就行。 例如,你想要安裝ArrayExpress,執(zhí)行如下命令安裝:
conda install -c bioconda bioconductor-arrayexpress
然而,事情不是總是難么順利,也是很容易安裝失敗。
失敗原因1:版本沖突
anaconda有三個(gè)重要的channel與R相關(guān)。
r
conda-forge
bioconda
其中bioconda里面都是bioconductor包,這個(gè)里面包。r、conda-forge里面都有一些R包, 這就很容易導(dǎo)致安裝包時(shí)各個(gè)channel里面的包互相沖突。
失敗原因2: conda install一下,地動(dòng)山搖
不知道biconda的打包策略,有的時(shí)候安裝一個(gè)R包卻要更新我的Python。往往安裝的時(shí)候我都心驚膽戰(zhàn), 生怕有啥不好的影響,一見到有更新Python的R包,往往只能采取其他方式安裝。
下載二進(jìn)制包安裝
這個(gè)方法針對(duì)有些R包有C代碼需要編譯安裝,卻又不想安裝編譯器,或者沒有編譯成功的情況。方法是去CRAN官網(wǎng), 找到你要安裝的包,選擇你要安裝平臺(tái)的二進(jìn)制包下載:
然后本地安裝:
install.packages("/path/to/download/file.zip", repos = NULL)
這里要注意,如果是本地安裝需要指定repos = NULL。為啥要單獨(dú)指定,R不會(huì)判斷是本地文件路徑還是包名嗎? 這個(gè)問題我也很疑惑。
源碼安裝
這個(gè)安裝方法是沒有辦法的辦法。設(shè)想我就是這個(gè)包的開發(fā)者,我會(huì)怎么開發(fā)這個(gè)包呢?
寫代碼
裝依賴
…
那么我下載這個(gè)包的源碼,把這個(gè)包的依賴依次裝上,然后再裝這個(gè)包不是水到渠成嗎?
這個(gè)方法最為麻煩,然而卻是能解決大部分的情況。大體步驟是這樣的:
下載源碼
解壓,進(jìn)入項(xiàng)目根目錄
像這個(gè)包的開發(fā)者一樣,使用devtools::install()進(jìn)行安裝
如果安裝失敗,打開DESCRIPTION文件
逐一安裝項(xiàng)目依賴,DESCRIPTION文件中Depends、Imports兩項(xiàng)是項(xiàng)目依賴,例如:
這個(gè)包依賴Biobase、XML、oligo、limma。
6. 如果依賴包依舊安裝錯(cuò)誤,則下載依賴包的源碼進(jìn)行源碼安裝(這是一個(gè)遞歸),直到所有依賴安裝成功, 這個(gè)時(shí)候再運(yùn)行devtools::install()就水到渠成了。