我想在访问RcppArmadillo中的矩阵元素时禁用绑定检查。
犰狳的文件说
可以通过编辑文件来配置犰狳 包括/ armadillo_bits / config.hpp。具体功能可以 通过取消注释或注释掉特定内容来启用或禁用 #define,列在下面。
但是在R包的上下文中,我该如何激活该指令?
我尝试使用
创建config.h
文件
#ifndef CONFIG_LOADED
#define CONFIG_LOADED
#define ARMA_NO_DEBUG
#endif
然后将其包含在我的/src
文件夹的每个 .cpp文件中,但我不确定它是否正常工作,或者除了添加{之外还有其他方法吗?每个.cpp文件中都有{1}}。
目前我有一个以.cpp开头的.cpp(包含主算法的那个):
#include "config.h"
然后是其他只是
的人#include "configs.h"
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
SEXP sample_gibbs_cpp(const arma::vec& v_n, const arma::mat& W,
arma::vec h_n, double alpha = 1, double beta = 1, int iter=100,
double burnin = 0.5){
... code ...
}
我的描述文件:
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;
... code ...
我用以下代码编译我的包:
Package: mypackage
Title: What the Package Does (one line, title case)
Version: 0.0.0.9000
Authors@R: person("First", "Last", email = "first.last@example.com", role = c("aut", "cre"))
Description: What the package does (one paragraph).
Depends:
R (>= 3.2.3)
License: What license is it under?
Encoding: UTF-8
LazyData: true
RoxygenNote: 5.0.1
Imports:
ggplot2,
dplyr,
tidyr,
rstan
LinkingTo: Rcpp, RcppArmadillo, RcppEigen
SystemRequirements: C++11
答案 0 :(得分:5)
订单在这里很重要。在包含#define
#include<RcppArmadillo.h>
声明包含在中
一个例子:
<强> custom_config.h 强>
#ifndef CONFIG_LOADED
#define CONFIG_LOADED
#define ARMA_NO_DEBUG
#endif
<强> example_compiled_file.cpp 强>
#include "custom_config.h"
#include <RcppArmadillo.h>
// [[Rcpp::export]]
void test_pkg(const arma::vec& x) {
// Should not trigger error bound checking with debug flag on.
double my_val_protected = x(0);
// Never triggers error bound checking
double my_val = x.at(0);
}
注意:由于这是一个软件包,因此不需要使用// [[Rcpp::depends(RcppArmadillo)]]
。相反,您必须在RcppArmadillo
文件的Rcpp
字段中指定LinkingTo:
和DESCRIPTION
,并在Rcpp
字段中添加Imports:
。您必须从Rcpp
最低限度地导入一个函数(最好是evalCpp
)。
e.g。 说明必须:
Imports: Rcpp (>= 0.12.15)
LinkingTo: Rcpp, RcppArmadillo