[Rcppdevel] broken package after udpate
Dirk Eddelbuettel
edd at debian.org
Sat Nov 17 00:08:33 CET 2012
On 17 November 2012 at 11:31, baptiste auguie wrote:
 Hi,

 (Hopefully this makes it to the list; I believe I've had problems reaching it
 because of a recent change between @gmail and @googlemail).
Looks like it.
 I made a minimal package * to illustrate the problem of my recently broken
 package cda (since yesterday's update of Rcpp). There's only one function euler
 () in a Module named cda. It used to return a 3x3 matrix, but after updating to
 Rcpp 0.10 it returns a vector. You can run the example with

 $ R f inst/testing/test.r

 What am I doing wrong?

 Best,

 baptiste

 * https://dl.dropbox.com/u/352834/cda_1.2.1.tar.gz
Good example. I added one line
Rcpp::Rcout << "In Euler, Rot is " << std::endl << Rot << std::endl;
and the end of 'Euler' and we see that the dimension is in fact there, but
then gets lost on the way out:
edd at max:/tmp/baptiste$ r lcda p e'M < cda$euler(1.1, 2.0, 3.1); dim(M); class(M); M'
[1] "cda" "grid" "reshape2" "randtoolbox"
[5] "rngWELL" "statmod" "plyr" "RcppArmadillo"
[9] "Rcpp" "methods" "base"
In Euler, Rot is
0.4378 0.8983 0.0378
0.3894 0.1515 0.9085
0.8104 0.4125 0.4161
[1] 0.43778268 0.38941320 0.81037256 0.89828547 0.15154235 0.41245379
[7] 0.03780919 0.90851102 0.41614684
NULL
[1] "numeric"
[1] 0.43778268 0.38941320 0.81037256 0.89828547 0.15154235 0.41245379
[7] 0.03780919 0.90851102 0.41614684
edd at max:/tmp/baptiste$
That is with the newest Rcpp and RcppArmadillo. So somewhere we are loosing
the matrix attribute.
If I 'make the whole thing slower' by explicitly converting, it works  I
just add euler2 as
NumericMatrix euler2(const double phi, const double theta, const double psi) {
arma::mat M(3,3);
M = euler(phi, theta, psi);
return Rcpp::wrap(M);
}
// [...]
function( "euler2", &euler2, "Constructs a 3x3 Euler rotation matrix" ) ;\
as seen here:
edd at max:/tmp/baptiste$ r lcda p e'M < cda$euler2(1.1, 2.0, 3.1); dim(M); class(M); M'
[1] "cda" "grid" "reshape2" "randtoolbox"
[5] "rngWELL" "statmod" "plyr" "RcppArmadillo"
[9] "Rcpp" "methods" "base"
In Euler, Rot is
0.4378 0.8983 0.0378
0.3894 0.1515 0.9085
0.8104 0.4125 0.4161
[,1] [,2] [,3]
[1,] 0.4377827 0.8982855 0.03780919
[2,] 0.3894132 0.1515423 0.90851102
[3,] 0.8103726 0.4124538 0.41614684
[1] 3 3
[1] "matrix"
[,1] [,2] [,3]
[1,] 0.4377827 0.8982855 0.03780919
[2,] 0.3894132 0.1515423 0.90851102
[3,] 0.8103726 0.4124538 0.41614684
edd at max:/tmp/baptiste$
So somewhere between the compiler getting smarter, Conrad optimising
expression and us, an attribute got lost.
Maybe Romain can find a way to make this explicit.
Cheers, Dirk

Dirk Eddelbuettel  edd at debian.org  http://dirk.eddelbuettel.com
More information about the Rcppdevel
mailing list