Linux環境下R和R包安裝及其管理


前言

R對windows使用很友好,對Linux來說充滿了敵意。小數據可以在windows下交互操作,效果很好很棒。可是當我們要處理大數據,或者要在集群上搭建pipeline時,不得不面對在Linux上裝R及想要的R包這個難題,尤其是對非root用戶而言更是艱難重重。

准備依賴庫

依次安裝:zlib/bzip/liblzma/pcre/curl,注意順序和版本。目前3.4以上3.6以下R版本相對較為穩定和不過時,我自己安裝的是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
#按官方文檔的推薦命令的安裝參數
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是很重要的一步,檢查系統環境,准備編譯和鏈接所需依賴及其種種復雜關系,往往死在第一步。

./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已經指定傳入了PCRE和XZ這兩個庫的路徑,還是會說缺少libpcre.so.1和liblzma.so.5這兩個庫文件。
為什么呢?gcc編譯鏈接動態庫時很有可能編譯通過,但是執行時找不到動態鏈接庫,那是因為-L選項指定的路徑只在編譯時有效。

如果是root用戶,修改/etc/ld.so.conf文件,將前面安裝的庫的路徑添加到這個文件中。

如果是非root用戶(絕大多數的我們),解決方法是通過-Wl(大寫的W和小寫的L),rpath=<your_lib_dir>,使得execute記住鏈接庫的位置。
此時如果在configure的時候加上-Wl,並不會起作用。configure成功的時候不僅生成Makefile,還會生成Makeconf(即將configure的參數傳入),因此我們可以直接修改Makeconf中的參數。

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已經傳入-L參數,因此我們只需在后面加上-Wl參數並指定相應庫路徑。注:原來的-L參數仍要保留。
#-L參數只能讓路徑在gcc編譯時有效,而-Wl參數只能讓其在運行時有效。

make成功。

3.make install
make成功后,一般這一步沒啥問題。

參考:https://xieduo7.github.io/2018-04-02-R安裝.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
更多參數--help一下

2. install.packages
which R查看下路徑,是否是剛才自己安裝的R。敲R,或全路徑進入R
install.packages('mypackage'),這種方式針對CRAN包。
一般會讓你選擇鏡像。選擇自己最近的,有的鏡像所含的R包不是很全,需要換一下。如果沒有自己想要的鏡像,也可自己指定(在R官網中可查鏡像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")  #如已安裝,后續安裝不再需要
BiocManager::install("clusterProfiler")

不推薦以下安裝方法,速度會很慢。

source("http://bioconductor.org/biocLite.R")
biocLite("mypackage")

如果不指定R包安裝的路徑,R包會安裝在/your/R/lib64/R/library中,這也是R自帶的基礎包的目錄。

常見操作

1.包的操作和管理

  • 添加環境變量:
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庫路徑到環境變量:
export R_LIBS=/your/R_packages
export R_LIBS=/others/.../R/lib64/R/library #添加環境變量R的lib路徑,可以使用別人安裝的包

R中用.libPaths()函數查看lib路徑,如果有多個lib,install.packages()默認是安裝在第一個目錄下。如果一開始就沒指定R包安裝路徑並配置環境變量,則默認安裝在/your/R/lib64/R/library中。

2. 其他操作
其實和window控制台一樣,只是換成了單命令行:

.libPaths() #查看包的安裝目錄
library() #查看已經安裝的包目錄
library(package) #載入mypackage包
getOption("defaultPackages") #查看啟動R時自動載入的包。
help(package = 'mypackage') #查看‘mypackage’的幫助

args(function):查看函數的參數
example(function):自動運行該函數幫助文檔中的例子,很贊!
demo("package"):展示包中demo
vignette('mypackage'):有的包特別是bioconductor的包有vignette
openVignette('mypackage'):這個函數也可以查看vignette,更好用一些
RSiteSearch("helpinfor"):搜索R網站上的“helpinfor”相關信息
help.start():查看已經安裝包的詳細HTML文檔,這個命令非常爽。

search():查看當前載入的包
sessionInfo():查看R中載入的包
methods():查看某個S3泛型函數中所有的方法或者一個類中所有的方法(S3:S version 3)
showMethods(class = "myClass"):查看S4類的方法
findMethods("myMethods"):查看method的代碼
class(myObject):查看某個對象的類
getClass(“class/package”):查看某個class或者包的具體內容
getSlots("class"):查看某個class的slot
slotNames(MyObject):查看某個對象的slot。
可以使用Myobject@slotNames訪問對象的slot值,這個@設計實在是太爽了,可以連續用。

查詢包內信息:
1. ?function/method:查看某個“函數”或者“方法”的詳細內容
2. class?graph::graph:查看“組”的詳細內容的一個例子。這個例子的來源是查詢graph包時候,查看其中class的信息,輸入??graph后出現一個graph::graph-class。

ls("package:mypackage"):查看"mypackage"中的所有對象。

Ref: https://www.cnblogs.com/xianghang123/archive/2013/01/08/2851450.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM