[Rcpp-devel] Returning a matrix from RcppEigen

Michael Hannon jmhannon.ucdavis at gmail.com
Sat Jun 28 00:09:22 CEST 2014


This may be too-simpleminded for subscribers to this list, but I've
posted my two examples to:

    https://github.com/DavisDaddy/RcppLinAlg

-- Mike

On Fri, Jun 27, 2014 at 11:38 AM, Kevin Ushey <kevinushey at gmail.com> wrote:
> 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
>
>


More information about the Rcpp-devel mailing list