0

R で RcppEigen を使用しています。R レイヤーから double ベクトルを取得したいと思います。

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));

だから、私はそれをdoubleに変換する必要があります。Eigen::VectorXi を Eigen::VectorXd に変換できますか?

4

1 に答える 1

2

あなたが別名またはその逆integerを意味したときにRからの呼び出しを混乱させていないことを確認しますか?2つの関数を持たない、または関数内にディスパッチする理由はありません。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 に答える