各位大神好!最近尝试使用学校的服务器运行R程序,需要自己配置环境。之前没有相关经验。
学校的服务器使用的是Ubuntu系统,我本地使用的SSH软件是Terminus。
成功安装R以后,想继续安装tidyverse包,但是遇到了一连串的错误。其中一些是需要安装其它软件,安装了以后,还是有错误。因为tidyverse包的安装及出错信息太长了,下面就以安装purrr包为例展示一下我安装时所遇到的问题:

root@**********:~# R

R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> install.packages('purrr')
Installing package into '/usr/local/lib/R/site-library'
(as 'lib' is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/purrr_1.0.1.tar.gz'
Content type 'application/x-gzip' length 220628 bytes (215 KB)
==================================================
downloaded 215 KB

* installing *source* package 'purrr' ...
** package 'purrr' successfully unpacked and MD5 sums checked
** libs
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c backports.c -o backports.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c cleancall.c -o cleancall.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c coerce.c -o coerce.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c conditions.c -o conditions.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c flatten.c -o flatten.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c init.c -o init.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c map.c -o map.o
map.c: In function 'map_impl':
map.c:86:11: warning: implicit declaration of function 'INTEGER_ELT'; did you mean 'INTEGER'? [-Wimplicit-function-declaration]
   int n = INTEGER_ELT(ffi_n, 0);
           ^~~~~~~~~~~
           INTEGER
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG  -I"/usr/local/lib/R/site-library/cli/include"   -fvisibility=hidden -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-AitvI6/r-base-3.4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c pluck.c -o pluck.o
pluck.c: In function 'extract_vector':
pluck.c:130:41: warning: implicit declaration of function 'COMPLEX_ELT'; did you mean 'COMPLEX'? [-Wimplicit-function-declaration]
   case CPLXSXP: return Rf_ScalarComplex(COMPLEX_ELT(x, offset));
                                         ^~~~~~~~~~~
                                         COMPLEX
pluck.c:130:41: error: incompatible type for argument 1 of 'Rf_ScalarComplex'
In file included from pluck.c:3:0:
/usr/share/R/include/Rinternals.h:1411:7: note: expected 'Rcomplex {aka struct <anonymous>}' but argument is of type 'int'
 SEXP  Rf_ScalarComplex(Rcomplex);
       ^~~~~~~~~~~~~~~~
/usr/lib/R/etc/Makeconf:159: recipe for target 'pluck.o' failed
make: *** [pluck.o] Error 1
ERROR: compilation failed for package 'purrr'
* removing '/usr/local/lib/R/site-library/purrr'

The downloaded source packages are in
        '/tmp/RtmpuM4x4y/downloaded_packages'
Warning message:
In install.packages("purrr") :
  installation of package 'purrr' had non-zero exit status

我的系统信息:

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4   

谢谢!

    Cloud2016 谢谢!我觉得很可能就是你说的原因,我才意识到我自己本地R的版本号要高得多。

    利用root账户安装也有它的好处,一次安装,所有用户都可以用了。

      你的服务器的版本不一定支持安装高版本的R,如果果真如此,可以考虑装个虚拟机。

      如果服务器上帐号权限不够的话,可以自己直接下载R的源码本地编译安装。当然,我觉得这对于刚接触来说还是太夸张了。也可以考虑先装anaconda或miniconda,这是仅针对当前用户,不需要特殊的权限,然后 conda create -n r_env r-essentials r-base来创建一个R环境并安装base R,更多的可以参考文档。只不过使用anaconda版本的R需要注意跟自己原先有自定义的R软件包的存储位置可能会有冲突导致混乱。

      话说管理员给你分配了root帐号?实在是难以想象…… :

        chuxinyuan 普通账户+sudo也可以啦。我极少用root,偶尔用来修系统还有解锁账户(sudo密码错误三次后账号会锁定)。我感觉用root就是手里有个核弹按钮,要是一不小心在根目录执行 rm -rf * 就完蛋了。

        在支持低版本R方面,data.table 做的比 tidyverse 好很多。

        感谢大家这么热情的回复!我的问题下午解决了。这里复盘一下解决的过程,和大家分享(也防止以后自己忘了。)

        昨天拿到账号密码以后,直接在ChatGPT里问我应该怎么去安装R。
        提问:

        我要在linux系统里安装R软件。应该怎么做

        回答:

        在Linux系统中安装R软件可以按照以下步骤进行:

        更新软件包列表:在终端中输入以下命令,以更新软件包列表和依赖关系:
        sudo apt-get update
        安装R:在终端中输入以下命令,以安装R软件:
        sudo apt-get install r-base
        这会安装最新的稳定版R软件包和所有必需的依赖关系。
        启动R:在终端中输入以下命令,以启动R:
        R
        这将启动R控制台,您可以在其中输入R命令进行数据分析和可视化。
        此外,如果您需要安装R的可视化界面或其他插件,可以在R控制台中使用install.packages()命令进行安装。例如,要安装ggplot2可视化包,可以在R控制台中输入以下命令:
        install.packages("ggplot2")
        这将自动从CRAN(Comprehensive R Archive Network)下载和安装ggplot2包及其所有依赖项。

        然后我就照抄了。照抄的结果是我没有意识到这样下载的R版本上会有问题(正如Cloud2016 一针见血指出来的),所以后面Tidyverse装不上。

        下午的解决方案,是老老实实从R的官网上找到了怎么在Ubuntu系统上装R。装好了再检查,就是最新的版本了:

        > sessionInfo()
        R version 4.2.2 Patched (2022-11-10 r83330)
        Platform: x86_64-pc-linux-gnu (64-bit)
        Running under: Ubuntu 18.04.5 LTS
        
        Matrix products: default
        BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
        LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
        
        locale:
        [1] C
        
        attached base packages:
        [1] stats     graphics  grDevices utils     datasets  methods   base     
        
        loaded via a namespace (and not attached):
        [1] compiler_4.2.2

        安装完最新版本的R以后,其实Tidyverse包仍然不能正常安装。错误信息很长很长,但是看到其中经常出现这么一句:”某某某包是在比 R 4.0.0 更低的版本里安装的,现在用不了,请重新安装。“这明显是之前下载的低版本R的附带后果。然后就重新安装指定的包以后,再去安装Tidyverse包,然后同样的出错信息再次出现。这么重复了几遍以后,意识到可能有很多的包都存在版本不兼容的问题,于是索性把所有能卸载的包都卸了,再重新安装Tidyverse包。
        最终问题解决。

        fenguoerbian 只不过使用anaconda版本的R需要注意跟自己原先有自定义的R软件包的存储位置可能会有冲突导致混乱。

        昨天在 archlinuxcn 群看依云说不推荐在 shell 配置文件(如 .bashrc)里面加入初始化 conda 的命令。我把相关消息转发到这里,希望大家别踩坑了。

        本群曾经解决过多位群友默认加载 conda 导致的各种奇怪问题

        conda 会自带一堆 Python 的东西,还有各种常见的库如 curl、ncurses 等,会和系统的打架的

        conda 是完全没有考虑过 Linux 桌面用户的日常使用

        消息来源:

          Heterogeneity

          没有关系。

          Anaconda=Python+一堆Python科学计算的软件+Conda包管理器(可以用来装R和R包)。

          miniconda更简洁,没有一堆科学计算软件,应该比较适合你。

          CyrusYip

          恩,你提到的这一点我以前也遇到过,这当中可能也涉及到interactive 和non-interactive shell的区别,如果shell启动的时候并不读取.bashrc那么就不一定会加载到conda的设置。我现在虽然.bashrc中加入了conda的初始化命令,但是默认是不激活的设置。

          而关于R的话其实就是多版本R共存的时候,它们都会读取到环境变量中的R_LIBS_USER变量(如果存在的化),那么就会导致不同版本的R默认的软件包首选位置是同一个目录,然后就会开始打架。虽然用conda的时候可以conda install相当一部分的包,但总归还是有在R环境中直接安装包的需求。