[Rcpp-devel] Returning a matrix from RcppEigen

Kevin Ushey kevinushey at gmail.com
Fri Jun 27 20:38:46 CEST 2014


Hi Michael,

Thanks for reporting -- things like this signal that we could do better
error reporting, e.g. it might be more appropriate to see

Error in eval(expr, envir, enclos) (from srcConn#6) :
        Wrong R type for mapped vector (expected 'double', got 'integer')

or something to that effect. You might consider logging an issue at
https://github.com/RcppCore/RcppEigen so that we might tackle it later.

Cheers,
Kevin


On Fri, Jun 27, 2014 at 11:31 AM, Michael Hannon <jmhannon.ucdavis at gmail.com
> wrote:

> Thanks, Dirk.  Last night I woke up with a cramp in my leg and the
> inspiration that the problem was in the R test code, not in the call
> to Eigen.  I was absent-mindedly creating integer matrices in my test
> code.  After I changed to:
>
>     amat <- matrix(as.numeric(1:9), nrow=3)
>
> etc., the Eigen stuff worked just fine.  Sorry for the noise.
>
> -- Mike
>
> On Fri, Jun 27, 2014 at 2:38 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
> >
> > On 26 June 2014 at 16:01, Michael Hannon wrote:
> > | Greetings.  I've been trying to get familiar with RcppArmadillo and
> RcppEigen.
> > | As my "Hello, world!" example I'm using matrix multiplication.  I got
> the
> > | Armadillo version to work, but I'm having trouble with the Eigen
> version.
> > |
> > | I'm trying to mimic one of Dirk's gallery snippets:
> > |
> > |     http://gallery.rcpp.org/articles/eigen-eigenvalues/
> > |
> > | I've appended the details.  My problem is that I evidently don't know
> what to
> > | return from the function.  I've tried various alternatives, but the
> only one
> > | that compiles is:
> > |
> > |     return C;  // C = A * B
> > |
> > | This compiles but produces the error message:
> > |
> > |     > mat_mul_eigen(amat, bmat)
> > |     Error in eval(expr, envir, enclos) (from srcConn#6) :
> > |         Wrong R type for mapped vector
> > |
> > | I must be overlooking something obvious.  Suggestions welcome.  Thanks.
> >
> > I am out at a conference and can't look in detail but I would invite you
> to
> > check the other examples in the package itself: The unit tests are one
> > source, the examples and FastLm are another and then there are the other
> > packages using RcppEigen as well as other Rcpp Gallery posts.  This
> should be
> > fixable pretty easily.
> >
> > Dirk
> >
> >
> > | -- Mike
> > |
> > | (File is: mat_mul_eigen.cpp.  Executed in R via:
> > |     sourceCpp("./mat_mul_eigen.cpp")
> > | )
> > |
> > |
> > | #include <RcppEigen.h>
> > |
> > | // [[Rcpp::depends(RcppEigen)]]
> > |
> > | using Eigen::Map;               // 'maps' rather than copies
> > | using Eigen::MatrixXd;                  // variable size matrix,
> > | double precision
> > | using Eigen::VectorXd;                  // variable size vector,
> > | double precision
> > |
> > | // [[Rcpp::export]]
> > |
> > | MatrixXd  mat_mul_eigen(Map<MatrixXd> A_,
> > | Map<MatrixXd> B_) {
> > |
> > |   MatrixXd C(A_ * B_);
> > |
> > |   return C;
> > | }
> > |
> > |
> > | /*** R
> > |
> > | library(microbenchmark)
> > | amat <- matrix(1:9, nrow=3)
> > | bmat <- matrix(10:18, nrow=3)
> > |
> > | mat_mul_eigen(amat, bmat)
> > |
> > | amat %*% bmat
> > |
> > | microbenchmark(
> > |   amat %*% bmat,
> > |   mat_mul_eigen(amat, bmat)
> > | )
> > |
> > | */
> > | _______________________________________________
> > | Rcpp-devel mailing list
> > | Rcpp-devel at lists.r-forge.r-project.org
> > |
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> >
> > --
> > http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20140627/c9d4a059/attachment.html>


More information about the Rcpp-devel mailing list