R语言 | 安装ggpubr R包时编译语句中出现 WARNING: ignoring environment value of R_HOME 而报错

news/2024/9/23 14:22:51/

在安装 ggpubr 时,出现报错。

1. 环境介绍

系统:CentOS7.9

$ R --version
R version 4.3.2 (2023-10-31) – “Eye Holes”

$ gcc --version
gcc (GCC) 12.3.0

2. 缺少cmake

$ sudo yum install cmake3> system("/usr/bin/cmake3 --version")
> install.packages("nloptr")

3. 编译语句出现 WARNING: ignoring environment value of R_HOME

> install.packages("minqa")
...
gcc编译语句中出现:WARNING: ignoring environment value of R_HOME
导致红字:
/bin/ld: cannot find WARNING:: No such file or directory
/bin/ld: cannot find ignoring: No such file or directory
/bin/ld: cannot find environment: No such file or directory
/bin/ld: cannot find value: No such file or directory
/bin/ld: cannot find of: No such file or directory
/bin/ld: cannot find R_HOME: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [lme4.so] Error 1

但是我的R环境能找到变量R_HOME:

> system("echo $R_HOME")  
/opt/R/4.3.2/lib64/R

1) 解释1 : 没帮助

https://github.com/rstudio/renv/issues/417
This looks a little suspicious. Is it possible that you've set some environment variables to point to a separate (older?) R installation? What is the output of:Sys.getenv("R_HOME")  in your session?> Sys.getenv("R_HOME")
[1] "/opt/R/4.3.2/lib64/R"

2)我怀疑就是老外没写好包,导致编译不正常,那就尝试fix它

首先下载R包到本地:

$ cd /picb/jinlab/wangjl/others/shenwh/PTC/output/
$ wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/minqa_1.2.7.tar.gz解压缩
$ tar zxvf minqa_1.2.7.tar.gz
$ cd minqa查问题关键词:
$ find . | xargs grep -in "R_home" --color=auto找到问题文件:echo $(R_HOME) 确实不识别
而去掉圆括号正常识别:
$ echo $R_HOME
/opt/R/4.3.2/lib64/R

修改它: 就是删除R_HOME外的圆括号:

$ vim src/Makevars
#PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`  修改为:
PKG_LIBS = `$R_HOME/bin/Rscript -e "Rcpp:::LdFlags()"`

重新构建R包:

$ cd ..
$ R CMD build minqa
["/picb/jinlab/wangjl/R/x86_64-pc-linux-gnu-library/4.3","/opt/R/4.3.2/lib64/R/library"]* checking for file ‘minqa/DESCRIPTION’ ... OK
* preparing ‘minqa’:
* checking DESCRIPTION meta-information ... OK
* cleaning src
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building ‘minqa_1.2.7.tar.gz’

在R中安装该包:

> install.packages("/picb/jinlab/wangjl/others/shenwh/PTC/output/minqa_1.2.7.tar.gz")
> packageVersion("minqa")
[1] ‘1.2.7’

4. lme4 包也同样编译报错(同上),全命令行修改安装

上文忘了记录报错过程了,和这个几乎一模一样:

> install.packages("lme4")
g++ -std=gnu++11 -shared -L/opt/R/4.3.2/lib64/R/lib -L/usr/local/lib64 -o lme4.so external.o glmFamily.o optimizer.o predModule.o respModule.o WARNING: ignoring environment value of R_HOME -L/opt/R/4.3.2/lib64/R/lib -lR
注意以上编译语句中出现了一句警告:WARNING: ignoring environment value of R_HOME
导致无法识别,引发进一步报错:
/bin/ld: cannot find WARNING:: No such file or directory
/bin/ld: cannot find ignoring: No such file or directory
/bin/ld: cannot find environment: No such file or directory
/bin/ld: cannot find value: No such file or directory
/bin/ld: cannot find of: No such file or directory
/bin/ld: cannot find R_HOME: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [lme4.so] Error 1

下载该包:

$ wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/lme4_1.1-35.3.tar.gz
$ tar zxvf lme4_1.1-35.3.tar.gz

修改

$ vim lme4/src/Makevars
#PKG_LIBS = `$(R_HOME)/bin/Rscript --vanilla -e "Rcpp:::LdFlags()"` #去掉R_HOME外的圆括号,修改为:
PKG_LIBS = `$R_HOME/bin/Rscript --vanilla -e "Rcpp:::LdFlags()"`

重新构建

$ R CMD build lme4报错 rror: processing vignette 'lmer.Rnw' failed with diagnostics:there is no package called 'gamm4'似乎是循环依赖:> install.packages("gamm4")它又开始先安装 lme4,而该包还是报错

使用文件夹安装呢?可以!

$ R CMD INSTALL lme4> packageVersion("lme4")
[1] ‘1.1.35.3’

5. 成功安装ggpubr包

接着一切顺利了。

> install.packages("ggpubr")加载:
> packageVersion("ggpubr")
[1] ‘0.6.0’
> library("ggpubr")
Loading required package: ggplot2
>

10. 那么,Makevars 中圆括号什么意思?

$(R_HOME) 是函数调用!

参考 https://blog.csdn.net/evilswords/article/details/12349187
如 $(strip ) 名称:去空格函数——strip。

所以,我认为R包原作者们是写错了,应该去掉R_HOME外的圆括号,还原它为一个普通变量名。

Ref

  • Building and installing an R package https://kbroman.org/pkg_primer/pages/build.html
  • makefile 中常见变量及函数 https://blog.csdn.net/evilswords/article/details/12349187

http://www.ppmy.cn/news/1466098.html

相关文章

MongoDB CRUD操作:插入文档

MongoDB CRUD操作:插入文档 文章目录 MongoDB CRUD操作:插入文档使用MongoDB Atlas UI插入文档插入单个文档插入多个文档插入行为自动创建集合_id字段原子性写确认 在MongoDB中插入文档的集中方式: 使用编程语言提供的驱动程序,在…

milvus索引

Milvus是一个开源的向量数据库引擎,旨在支持大规模向量相似度搜索和分析。索引在Milvus中扮演着非常重要的角色,它们用于加速向量数据的检索。下面详细介绍一下Milvus中的索引: 1. 索引类型 Milvus支持多种索引类型,每种类型都适…

脑图工具 在学习系统架构中的使用

系统,有人把它比作一个黑盒,有人比作一个树洞。呃,其实二者都隐含的表达了一个意思,盘根错节,一言难尽,欲说还休,说了又像是隔靴搔痒,感觉没说透。 学习,理解和展示一个…

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR 在导入窗口左上角有个选项: 导入后弹出 把这个去掉就可以了

Python爬虫实战(实战篇)—16获取【百度热搜】数据—写入Ecel(附完整代码)

文章目录 专栏导读背景结果预览1、爬取页面分析2、通过返回数据发现适合利用lxmlxpath3、继续分析【小说榜、电影榜、电视剧榜、汽车榜、游戏榜】4、完整代码总结 专栏导读 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门…

计算机网络——TCP / IP 网络模型

OSI 七层模型 七层模型是国际标准化的一个网络分层模型,大体结构可以分成七层。每层提供不同的功能。 图片来源 JavaGuide 但是这样七层结构比较复杂,不太实用,所以有了 TCP / IP 模型。 TCP / IP 网络模型 TCP / IP 网络模型可以看作是 O…

怎么看自己电脑的配置?提升电脑的使用效率

了解自己电脑的配置是非常重要的,它可以帮助您了解电脑的性能水平,从而更好地选择适合的软件和游戏,或者进行系统升级和维护。然而,许多用户可能不知道怎么看自己电脑的配置信息。本文将介绍三种简单的方法,帮助您轻松…

【退役之重学 SQL】什么是笛卡尔积

一、初识笛卡尔积 概念: 笛卡尔积是指在关系型数据库中,两个表进行 join 操作时,没有指定任何条件,导致生成的结果集,是两个表中所有行的组合。 简单来说: 笛卡尔积是两个表的乘积,结果集中的每…