在 macOS 的 conda 环境下使用 R 包

Nae*_*vis 2 macos r conda

我正在尝试在 macOS 的 conda 环境中使用包含 Rcpp + OpenMP 的 R 包。我阅读了 conda 环境文档;但是,我无法解决以下可重现示例中遇到的问题。大多数文档都是基于解决 macOS 上的 OpenMP 问题 (clang+llvm)。我想知道是否有 conda 环境的任何资源或文档。这些步骤适用于 Linux 系统(带 conda)和 macOS(不带 conda),没有任何问题。

这是可重现的示例:

在 macOS 中:

步骤1:创建conda环境并安装R:

conda create -n env r-essentials r-base
Run Code Online (Sandbox Code Playgroud)

第二步:激活环境

conda activate env
Run Code Online (Sandbox Code Playgroud)

第三步:安装rstudio

conda install -c r rstudio
Run Code Online (Sandbox Code Playgroud)

第四步:安装一些需要的包

conda install -c r r-devtools
conda install -c r r-wcorr
conda install -c r r-ranger
conda install -c conda-forge r-rcpparmadillo
conda install -c r r-testthat
conda install -c conda-forge r-superlearner
conda install -c conda-forge r-polycore
conda install -c conda forge r-logger
conda install -c anaconda llvm
conda install -c conda-forge openmp
Run Code Online (Sandbox Code Playgroud)

第5步:运行rstudio

第6步:进入rstudio

library('devtools')
install_github('fasrc/CausalGPS')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

In file included from ColorSpace.cpp:1:
In file included from ./ColorSpace.h:4:
In file included from env/bin/../include/c++/v1/typeinfo:60:
In file included from env/bin/../include/c++/v1/exception:81:
In file included from env/bin/../include/c++/v1/cstdlib:85:
In file included from env/bin/../include/c++/v1/stdlib.h:100:
env/bin/../include/c++/v1/math.h:773:12: error: no member named 'labs' in the global namespace; did you mean 'abs'?
 return ::labs(__x);
     ~~^
~/env/bin/../include/c++/v1/math.h:772:39: note: 'abs' declared here
inline _LIBCPP_INLINE_VISIBILITY long abs(long __x) _NOEXCEPT {
                   ^
~/env/bin/../include/c++/v1/math.h:777:12: error: no member named 'llabs' in the global namespace
 return ::llabs(__x);
     ~~^
~/env/bin/../include/c++/v1/math.h:785:12: error: no member named 'fabsf' in the global namespace
 return ::fabsf(__lcpp_x);
     ~~^
~/env/bin/../include/c++/v1/math.h:789:12: error: no member named 'fabs' in the global namespace; did you mean 'abs'?
 return ::fabs(__lcpp_x);
     ~~^
~/env/bin/../include/c++/v1/math.h:772:39: note: 'abs' declared here
inline _LIBCPP_INLINE_VISIBILITY long abs(long __x) _NOEXCEPT {
                   ^
~/env/bin/../include/c++/v1/math.h:794:12: error: no member named 'fabsl' in the global namespace
 return ::fabsl(__lcpp_x);
 ~~^
Run Code Online (Sandbox Code Playgroud)

我想我需要设置一些环境变量;但是,我找不到应该导出哪些变量。你有什么主意吗?

mer*_*erv 5

对我有用,进行了一些我认为更好的实践的调整:

  • 不要使用 Conda 的 RStudio - 它是一个废弃的项目;查看替代方案
  • 仅使用conda-forge通道 - 混合通道可能存在动态库问题
  • 使用 YAML 来实现更可靠的需求规范
  • 显式声明 R 版本 ( r-base)
  • 包含声明Imports中的所有内容(除了作为其他包的依赖项包含的内容)
  • conda-forge::r-cli>=3构建已损坏,因此我将其固定到最新的工作版本
  • 使用mamba因为conda速度慢

这是用于创建环境的 YAML:

causalgps-env.yaml

name: causalgps
channels:
  - conda-forge
dependencies:
  - r-base=4.1
  - r-tidyverse
  - r-devtools
  - r-xgboost
  - r-superlearner
  - r-earth
  - r-ranger
  - r-gam
  - r-kernsmooth
  - r-gnm
  - r-polycor
  - r-wcorr
  - r-rlang
  - r-glue
  - r-logger
  - r-cli>=2,<3
Run Code Online (Sandbox Code Playgroud)

步骤是:

  1. 创建环境。

    ## install Mamba if you don't have it
    ## conda install -n base conda-forge::mamba
    mamba env create -n causalgps -f causalgps-env.yaml
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在环境中运行 R 会话。

    conda activate causalgps
    R
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装包。

    library(devtools)
    install_github('fasrc/CausalGPS')
    
    Run Code Online (Sandbox Code Playgroud)
  4. 测试加载。

    library(CausalGPS) ## works
    
    Run Code Online (Sandbox Code Playgroud)