我正在尝试使用Rstudio在我的Windows系统中设置RcppArmadillo。我已使用命令
成功安装了RcppArmadilloinstall.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中找到
我认为编译的包含路径不具备此路径。我不知道如何将此文件夹添加到路径中。我非常感谢对这个问题的任何帮助。
答案 0 :(得分:3)
你做错了。有很多方法可以做到,我们记录了其中几个。你在这里做的不是其中之一。
试试这个并从那里开始:
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()
开始更糟糕。
答案 1 :(得分:0)
您的问题是细节问题,但如果您使用的是Windows计算机并且正在使用RStudio,那么这里是一个完全可重现的示例,说明如何在不使用RcppArmadillo
包的情况下使用inline
除了很短的功能外,它并不理想
正如Dirk所指出的那样,这个建议可以在其他地方获得--Rcpp *生态系统的记录很奇怪,但这可能对新手有帮助。
您应该安装以下内容:
该示例是计算线性回归模型的OLS估计器的简单示例。以下是C ++文件,其中一个函数(fnLinRegRcpp
)将设计矩阵作为输入并生成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 attributes:
// [[Rcpp::depends(RcppArmadillo)]]
表示Armadillo库的库依赖项。
以下是使用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