在RcppArmadillo中禁用“残缺的Lapack”警告

时间:2016-03-12 02:50:00

标签: r rcpp armadillo

我正在使用RcppArmadillo来解决线性系统问题。来自CRAN的Mac的R二进制文件被配置为使用BLAS和Lapack的内置子集,并且我没有成功构建R以使用外部BLAS + Lapack(我发送了一封电子邮件给r-sig-mac寻求帮助,但到目前为止还没有收到任何答案)。

不幸的是,除了可能缺乏性能之外,每次运行代码时我都会收到一个低级警告,

mount -o 'remount,rw' /home

快速填充我的终端控制台(我在循环中运行它)。如何配置RcppArmadillo不发出此警告?

warning: solve(): refinement and/or equilibration not done due to crippled LAPACK

1 个答案:

答案 0 :(得分:3)

安装时请查看configure;检查测试输出。代码(减去一些评论)基本上是:

## external LAPACK has the required function
lapack=$(${R_HOME}/bin/R CMD config LAPACK_LIBS)
hasRlapack=$(echo ${lapack} | grep lRlapack)

if [ "${hasRlapack}" == "" ]; then
    ## We are using a full Lapack and can use zgesdd -- so #undef remains
    echo "system LAPACK found"
    cp inst/include/RcppArmadilloLapack.h.in inst/include/RcppArmadilloLapack.h 
else
    ## We are using a R's subset of Lapack and CANNOT use zgesdd etc, so we mark it
    echo "R-supplied partial LAPACK found"
    echo "* some operations may not be available"
    sed -e 's/\/\/ \#undef ARMA_CRIPPLED_LAPACK/\#define ARMA_CRIPPLED_LAPACK 1/' \
        inst/include/RcppArmadilloLapack.h.in > inst/include/RcppArmadilloLapack.h 
fi

简而言之,您有两种选择:

i)有一个真正的外部LAPACK或

ii)使用捆绑了非残缺LAPACK的R版本 - 即R 3.3.0。

2016年3月12日编辑:因此,在没有系统LAPACK的情况下,R 3.3.0无法正确识别存在错误 - 即OS X为Windoze不佳无论如何,处理方式不同。现在在GH回购中处理。感谢@baptiste发现它。