Le 06/08/11 06:40, Ulrich Bodenhofer a écrit :
Dear Dirk,

Thanks for your detailed comments!

Regarding the first question: as I wrote, I was actually assuming that
Rcpp would not make deep copies.

[...]
See this variant:

R> fun<- cxxfunction(signature(mat="numeric"), plugin="Rcpp", body='
+ Rcpp::NumericMatrix matC(mat);
+ Rcpp::NumericMatrix matD(mat);
+
+ matC(1, 1) = 1;
+ matD(1, 1) = -matD(1, 1);
+
+ return(Rcpp::List::create(Rcpp::Named("C")=matC,
+ Rcpp::Named("D")=matD));
+ ');
R> fun(matrix(42,2,2))
$C
[,1] [,2]
[1,] 42 42
[2,] 42 -1

$D
[,1] [,2]
[1,] 42 42
[2,] 42 -1

R>

So C and D are really the same thing.

Fine. If so, I actually wonder what's wrong with my function

RcppExport SEXP test(SEXP mat)
{
BEGIN_RCPP
Rcpp::NumericMatrix matC(mat);
Rcpp::NumericMatrix matD(mat);

matC(1, 1) = 1;
matD(1, 1) = -matD(1, 1);

return(matC);
END_RCPP
}

I tried it on matrix(42, 2, 2) too and, surprise, it returns -1 as
element [2, 2] - just as in your example. So far so good. However, if I
apply it to matrix(1:16, 4, 4) (and this is an example similar to the
one I tried before, which actually made me write this question to the
list), I get the following (note the 1 at [2, 2]):

test(matrix(1:16, 4, 4))
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 1 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16

No mystery.

> typeof(matrix(1:16, 4, 4))
[1] "integer"

So NumericMatrix has no choice but to coerce your data to numeric, so matC and matD are two new objects, different from mat

If it's not the copying, what else is wrong here? I actually don't get
it. Very mysterious!

Regarding my third question, I have to admit that my example was flawed.
Stupid me! I wanted to write something like the following:

double *p;

{
Rcpp::NumericVector vec(10);
p = vec.begin();
}

As I understand your reply, I could use p outside the block, as it still
points to the data inside the R object created inside the block, right?

very dangerous. vec will be garbage collected at some time you don't control. don't do that.

Thanks again for your very helpful answers!

Best regards,
Ulrich
_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel



--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
http://romain-francois.com
|- http://bit.ly/lJoWbH : Montpellier Comédie Club - Juin 2011
|- http://bit.ly/kaSV6U : Stand up set at Up The Creek
`- http://bit.ly/hdKhCy : Rcpp article in JSS


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to