前言
R對windows使用很友好皱坛,對Linux來說充滿了敵意。小數(shù)據(jù)可以在windows下交互操作僧凤,效果很好很棒畜侦。可是當我們要處理大數(shù)據(jù)躯保,或者要在集群上搭建pipeline時旋膳,不得不面對在Linux上裝R及想要的R包這個難題,尤其是對非root用戶而言更是艱難重重途事。
準備依賴庫
依次安裝:zlib/bzip/liblzma/pcre/curl验懊,注意順序和版本。目前3.4以上3.6以下R版本相對較為穩(wěn)定和不過時尸变,我自己安裝的是3.5.2义图。
cd zlib-1.2.11
./configure --prefix =/your/path/zlib #一般最好新建一個目錄,以下同理
make
make install
cd bzip2-1.0.6
make -f Makefile-libbz2_so
然后修改 Makefile 中的PREFIX=/your/path/bzip2
make && make install
cd xz-5.2.3
./configure -prefix=/your/path/xz
make
make install
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure --enable-utf --enable-unicode-properties --enable-jit --disable-cpp --prefix /your/path/pcre
#按官方文檔的推薦命令的安裝參數(shù)
make
make install
tar -zxf curl-7.28.0.tar.gz
cd curl-7.28.0
./configure --prefix=/your/path/curl
make
make install
如果沒報錯召烂,怎么知道自己安裝成功了呢碱工?一般在各個庫的目錄下會新生成bin/include/lib/share等幾個目錄。
安裝R
源碼安裝方式同其他軟件步驟一樣骑晶,也是configure —— make —— make install痛垛,不過肯定沒那么順利,必然會有各種依賴庫找不到桶蛔。
1. congure
configure是很重要的一步匙头,檢查系統(tǒng)環(huán)境,準備編譯和鏈接所需依賴及其種種復(fù)雜關(guān)系仔雷,往往死在第一步蹂析。
./configure --prefix=/your/wantto/install/R --enable-R-shlib --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling LDFLAGS="-L/your/path/zlib/lib -L/your/path/bzip2/lib -L/your/path/xz/lib -L/your/path/pcre/lib -L/your/path/curl/lib" CPPFLAGS="-I/your/path/zlib/include -I/your/path/bzip2/include -I/your/path/xz/include -I/your/path/pcre/include -I/your/path/curl/include"
# R也是最好新建一個要安裝的路徑再指定舔示。指定各依賴庫的庫文件和頭文件。
2.make
configure成功电抚,此時如果直接make惕稻,一般也會報錯,如下:
/usr/bin/ld: warning: libpcre.so.1, needed by ../../lib/libR.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: liblzma.so.5, needed by ../../lib/libR.so, not found (try using -rpath or -rpath-link)
即使configure已經(jīng)指定傳入了PCRE和XZ這兩個庫的路徑蝙叛,還是會說缺少libpcre.so.1和liblzma.so.5這兩個庫文件俺祠。
為什么呢?gcc編譯鏈接動態(tài)庫時很有可能編譯通過借帘,但是執(zhí)行時找不到動態(tài)鏈接庫蜘渣,那是因為-L選項指定的路徑只在編譯時有效。
如果是root用戶肺然,修改/etc/ld.so.conf文件蔫缸,將前面安裝的庫的路徑添加到這個文件中。
如果是非root用戶(絕大多數(shù)的我們)际起,解決方法是通過-Wl(大寫的W和小寫的L),rpath=<your_lib_dir>拾碌,使得execute記住鏈接庫的位置。
此時如果在configure的時候加上-Wl街望,并不會起作用校翔。configure成功的時候不僅生成Makefile,還會生成Makeconf(即將configure的參數(shù)傳入)它匕,因此我們可以直接修改Makeconf中的參數(shù)展融。
LDFLAGS = -L/your/path/zlib/lib -L/your/path/bzip2/lib -L/your/path/xz/lib -L/your/path/pcre/lib -L/your/path/curl/lib -Wl,-rpath=/your/path/xz/lib -Wl,-rpath=/your/path/pcre/lib
# configure已經(jīng)傳入-L參數(shù)窖认,因此我們只需在后面加上-Wl參數(shù)并指定相應(yīng)庫路徑豫柬。注:原來的-L參數(shù)仍要保留。
#-L參數(shù)只能讓路徑在gcc編譯時有效,而-Wl參數(shù)只能讓其在運行時有效扑浸。
make成功烧给。
3.make install
make成功后,一般這一步?jīng)]啥問題喝噪。
參考:https://xieduo7.github.io/2018-04-02-R%E5%AE%89%E8%A3%85.html
安裝R包
Linux下安裝R包一般有2種方式:
1. R CMD INSTALL
下載源碼
R CMD INSTALL /.../mypackage.tar.gz
也可指定安裝庫路徑:
R CMD INSTALL /.../mypackage.tar.gz --library=/your/lib/path
更多參數(shù)--help
一下
2. install.packages
which R
查看下路徑础嫡,是否是剛才自己安裝的R。敲R酝惧,或全路徑進入R
install.packages('mypackage')
榴鼎,這種方式針對CRAN包。
一般會讓你選擇鏡像晚唇。選擇自己最近的巫财,有的鏡像所含的R包不是很全,需要換一下哩陕。如果沒有自己想要的鏡像平项,也可自己指定(在R官網(wǎng)中可查鏡像https://cran.r-project.org/mirrors.html)。
install.packages("packages","repos" = (CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"),lib="/lib/path")
以上針對的是CRAN中的包,如果是 bioconductor包呢割以?
先裝BiocManager蕊玷,再安裝所需R包即可。
install.packages("BiocManager") #如已安裝扣讼,后續(xù)安裝不再需要
BiocManager::install("clusterProfiler")
不推薦以下安裝方法缺猛,速度會很慢。
source("http://bioconductor.org/biocLite.R")
biocLite("mypackage")
如果不指定R包安裝的路徑椭符,R包會安裝在/your/R/lib64/R/library中枯夜,這也是R自帶的基礎(chǔ)包的目錄。
一口氣裝了這么多包艰山,包括依賴炒雞多的tidyverse和clusterProfiler等湖雹,爽歪歪。
常見操作
1.包的操作和管理
- 添加環(huán)境變量:
export PATH=/your/R/bin:$PATH
export LD_LIBRARY_PATH=/your/complie_tools/zlib/lib:/your/complie_tools/curl/lib:/your/complie_tools/bzip2/lib:/your/complie_tools/pcre/lib:/your/complie_tools/xz/bin:/your/R/lib64/R/lib:$LD_LIBRARY_PATH #這些都是一些依賴庫
- 添加R庫路徑到環(huán)境變量:
export R_LIBS=/your/R_packages
export R_LIBS=/others/.../R/lib64/R/library #添加環(huán)境變量R的lib路徑曙搬,可以使用別人安裝的包
R中用.libPaths()函數(shù)查看lib路徑摔吏,如果有多個lib,install.packages()默認是安裝在第一個目錄下纵装。如果一開始就沒指定R包安裝路徑并配置環(huán)境變量征讲,則默認安裝在/your/R/lib64/R/library中。
2. 其他操作
其實和window控制臺一樣橡娄,只是換成了單命令行:
.libPaths() #查看包的安裝目錄
library() #查看已經(jīng)安裝的包目錄
library(package) #載入mypackage包
getOption("defaultPackages") #查看啟動R時自動載入的包诗箍。
help(package = 'mypackage') #查看‘mypackage’的幫助
args(function):查看函數(shù)的參數(shù)
example(function):自動運行該函數(shù)幫助文檔中的例子,很贊挽唉!
demo("package"):展示包中demo
vignette('mypackage'):有的包特別是bioconductor的包有vignette
openVignette('mypackage'):這個函數(shù)也可以查看vignette滤祖,更好用一些
RSiteSearch("helpinfor"):搜索R網(wǎng)站上的“helpinfor”相關(guān)信息
help.start():查看已經(jīng)安裝包的詳細HTML文檔,這個命令非常爽瓶籽。
search():查看當前載入的包
sessionInfo():查看R中載入的包
methods():查看某個S3泛型函數(shù)中所有的方法或者一個類中所有的方法(S3:S version 3)
showMethods(class = "myClass"):查看S4類的方法
findMethods("myMethods"):查看method的代碼
class(myObject):查看某個對象的類
getClass(“class/package”):查看某個class或者包的具體內(nèi)容
getSlots("class"):查看某個class的slot
slotNames(MyObject):查看某個對象的slot匠童。
可以使用Myobject@slotNames訪問對象的slot值,這個@設(shè)計實在是太爽了塑顺,可以連續(xù)用汤求。
查詢包內(nèi)信息:
1. ?function/method:查看某個“函數(shù)”或者“方法”的詳細內(nèi)容
2. class?graph::graph:查看“組”的詳細內(nèi)容的一個例子。這個例子的來源是查詢graph包時候严拒,查看其中class的信息扬绪,輸入??graph后出現(xiàn)一個graph::graph-class。
ls("package:mypackage"):查看"mypackage"中的所有對象裤唠。
Ref: https://www.cnblogs.com/xianghang123/archive/2013/01/08/2851450.html