繁体   English   中英

使用Rstudio在Windows中设置Rcpp Armadillo

[英]Setting up Rcpp Armadillo in windows with Rstudio

我正在尝试使用Rstudio在Windows系统中设置RcppArmadillo。 我已经使用以下命令成功安装了RcppArmadillo

install.packages("RcppArmadillo")

在R控制台中。

但是,当我尝试使用RcppArmadillo依赖项编译C ++代码时,出现类似以下错误

g++ -m64 -I"C:/PROGRA~1/R/R-30~1.3/include" -DNDEBUG     -I"C:/PROGRA~1/R/R-30~1.3/library/Rcpp/include"  -I"d:/RCompile/CRANpkg/extralibs64/local/include"     -O2 -Wall  -mtune=core2 -c colrowStat.cpp -o colrowStat.o colrowStat.cpp:5:26: fatal error: RcppArmadillo.h: No such file or directory compilation terminated. make: *** [colrowStat.o] Error 1 Warning message: running command 'make -f "C:/PROGRA~1/R/R-30~1.3/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-30~1.3/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_38187.dll" WIN=64 TCLBIN=64 OBJECTS="colrowStat.o"' had status 2 

但是头文件位于path_to_my_documents / R / win-libraries / 3.0 / RcppArmadillo / Include中

我认为编译的包含路径没有这个路径。 我没有如何将此文件夹添加到路径。 我非常感谢您对这个问题的帮助。

你做错了。 有很多方法可以做到,我们记录了其中的几种方法。 您在这里所做的不是其中之一。

尝试以下方法,然后从那里开始:

R> library(Rcpp)
R> cppFunction("arma::mat op(arma::vec x) { return(x*x.t()); }", 
+              depends="RcppArmadillo")
R> op(1:2)
     [,1] [,2]
[1,]    1    2
[2,]    2    4
R> 

这是基本示例之一:取一个向量,将其乘以其转置并返回结果外部乘积矩阵。

您最终想要的是一个程序包,为此,您可能做得比通过RcppArmadillo.package.skeleton()开始要糟糕得多。

您的问题缺少详细信息,但是如果您使用的是Windows计算机,并且正在使用RStudio,那么这是一个完全可复制的示例,说明如何在不使用inline软件包的情况下使用RcppArmadillo ,这是非常理想的选择,但功能非常短。
正如Dirk所指出的那样,该建议可在其他地方获得-Rcpp *生态系统的文献资料非常丰富,但这可能对新手有所帮助。

0.初步:

您应该安装以下软件:

  1. 工具
  2. R包devtools
  3. R包Rcpp
  4. R包RcppArmadillo

1. C ++代码:

该示例是为线性回归模型计算OLS估计量的一种简单方法。 这是带有一个函数( fnLinRegRcpp )的C ++文件,该函数将设计矩阵作为输入并生成OLS系数估计和模型残差作为Rcpp List如下所示:

// LinearRegression.cpp
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace arma;  // use the Armadillo library for matrix computations
using namespace Rcpp;

// [[Rcpp::export]]
List fnLinRegRcpp(vec vY, mat mX) {

  // compute the OLS estimator & model residuals
  vec vBeta =  solve(mX.t()*mX, mX.t()*vY);  
  vec vResid = vY - mX * vBeta;

  // construct the return object
  List ret;
  ret["beta"] = vBeta;
  ret["resid"] = vResid;

  return ret;
}

// END

请注意Rcpp属性的使用:

// [[Rcpp::depends(RcppArmadillo)]]

指示对Armadillo库的库依赖关系。

2. R代码

这是使用sourceCpp函数编译C ++代码的示例,以及该函数使用的示例,以及输出与内置lm.fit函数的比较。

# LinearRegression.R
library(devtools)
library(Rcpp)
library(RcppArmadillo)

Rcpp::sourceCpp("code/LinearRegression.cpp", 
                showOutput = TRUE, 
                rebuild = FALSE)

# generate some sample data
iK = 4
iN = 100
mX = cbind(1, matrix(rnorm(iK*iN), iN, iK))
vBeta0 = c(2, 3.5, 0.11, 6.33, 23)
vY = rnorm(iN, mean = mX %*% vBeta0)

# test the function
linReg1 = fnLinRegRcpp(vY, mX)
linReg1$beta  # coefficient estimates

# compare the results to the built-in lm.fit function
lm.fit(y = vY, x = mX)$coef  # coefficient estimates

# END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM