我在R上使用RcppEigen。我想从 R 层获取一个双向量:
RcppExport SEXP testfunc (SEXP a) {
const Eigen::Map<Eigen::VectorXd> vecD(as<Eigen::Map<Eigen::VectorXd> >(a));
但是,数字是整数,所以我需要像这样将其作为整数:
RcppExport SEXP testfunc (SEXP a) {
const Eigen::Map<Eigen::VectorXi> vecD(as<Eigen::Map<Eigen::VectorXi> >(a));
所以,我需要将其转换为双精度。我可以将 Eigen::VectorXi 转换为 Eigen::VectorXd 吗?
当你的意思是numeric
又名double
反之亦然时,你确定你不会与来自 R 的 integer
混淆吗? 没有理由不有两个函数,或者在函数内部调度。
例如,考虑这里的代码(使用 Rcpp 0.10.0 功能)
#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::export]]
double vecdSum(SEXP x) {
const Eigen::Map<Eigen::VectorXd>
vec(Rcpp::as<Eigen::Map<Eigen::VectorXd> >(x));
return vec.sum();
}
// [[Rcpp::export]]
int veciSum(SEXP x) {
const Eigen::Map<Eigen::VectorXi>
vec(Rcpp::as<Eigen::Map<Eigen::VectorXi> >(x));
return vec.sum();
}
我们可以很容易地使用
R> sourceCpp('/tmp/vecsums.cpp') # Rcpp 0.10.0 adds this
R> veciSum(c(1L, 2L, 3L))
[1] 6
R> vecdSum(c(1, 2, 3))
[1] 6
R>