[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