R: Ubuntu 中的包安装问题

R: package installation trouble in Ubuntu

我运行正在 Ubuntu 16.04(在 Lenovo ThinkPak T450 上)。我已经安装了 R 版本 3.4.1,按照 Rbloggers 的说明 here 安装。

从这里开始,我想开始安装软件包,但是如果我从命令行 运行 R 没有 root 权限,我将无法访问 CRAN 镜像。也就是说,当我 运行 install.packages('dplyr') (或任何 install.packages('blah'))时,我得到以下错误

--- Please select a CRAN mirror for use in this session ---
Error: .onLoad failed in loadNamespace() for 'tcltk', details:
  call: fun(libname, pkgname)
  error: Can't find a usable init.tcl in the following directories: 
    /opt/anaconda1anaconda2anaconda3/lib/tcl8.5 ./lib/tcl8.5 ./lib/tcl8.5 ./library ./library ./tcl8.5.18/library ./tcl8.5.18/library

由于该错误,没有出现 CRAN 镜像对话框,因此没有安装包。注意:当我以 root 权限启动 R(即通过 > sudo R 启动)时不会发生此错误,但我不想以 root 身份安装包。

提前感谢您发送给我的任何帮助!

编辑:指定存储库也会导致错误(在下面的文件路径中,我用 user-name 替换了我的用户名)。

例如:install.packages('Rcpp',repos='http://cran.us.r-project.org') 终止于:

installing to /home/user-name/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Error: package or namespace load failed for ‘Rcpp’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/home/user-name/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/libs/Rcpp.so':
  /home/user-name/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/libs/Rcpp.so: undefined symbol: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/home/user-name/R/x86_64-pc-linux-gnu-library/3.4/Rcpp’

例如,install.packages('dplyr',repos='http://cran.us.r-project.org') 终止于:

installing to /home/user-name/R/x86_64-pc-linux-gnu-library/3.4/dplyr/libs
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/home/user-name/R/x86_64-pc-linux-gnu-library/3.4/bindrcpp/libs/bindrcpp.so':
  /home/user-name/anaconda3/lib/R/bin/exec/../../lib/../.././libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user-name/R/x86_64-pc-linux-gnu-library/3.4/bindrcpp/libs/bindrcpp.so)
ERROR: lazy loading failed for package ‘dplyr’
* removing ‘/home/user-name/R/x86_64-pc-linux-gnu-library/3.4/dplyr’

正如 DirkEddelbuettel 在评论中指出的那样,问题是 Anaconda 和 R 的混合。要解决此问题:

  • 我从 Anaconda 中卸载了 R 包,首先查看 > conda list 并意识到该包是 r-base;因此 运行宁 > conda remove r-base

  • 接下来,通过查看 > which R 的输出,很明显我们仍在尝试从 ../anaconda3/bin/.. 目录执行。我怀疑有一种快速的方法可以通过导出或 bashrc 修正(或类似的东西)来改变它,但对我来说,最快的解决方法是 运行 > sudo apt-get install r-base r-base-dev,这花了 0.2 秒因为它们已经安装了,但它确实影响了系统寻找合适目录的目录,对我来说这是 /usr/bin/R/

从这里我已经能够安装我需要的一切。

注意:回想起来,我怀疑 "mixing" 发生在我通过 conda 安装 rpy2 时。