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%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
更多参数--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自带的基础包的目录。

一口气装了这么多包,包括依赖炒鸡多的tidyverse和clusterProfiler等,爽歪歪。


image.png

常见操作

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容