0

我在 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 吗?

4

1 回答 1

2

当你的意思是aka或反之亦然时,你确定你不会对integerfrom R的调用感到困惑吗?没有理由不拥有两个函数,或者在你的函数内部调度。numericdouble

例如考虑这里的代码(使用 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>
于 2012-11-19T17:31:50.573 回答