[Rcpp-devel] Matrix columns

Nick Sabbe nick.sabbe at ugent.be
Sun May 15 21:50:02 CEST 2011


Dirk,

Thanks again!
I thought I ought to let you know: the main problem was that my compilation
still pointed to older versions of R and Rcpp that did not contain some of
the additions in case. Goes to show!

But still some comments/questions below...

> -----Original Message-----
> From: Dirk Eddelbuettel [mailto:edd at debian.org]
> Sent: zondag 15 mei 2011 21:22
> To: Nick Sabbe
> Cc: 'Dirk Eddelbuettel'; rcpp-devel at r-forge.wu-wien.ac.at
> Subject: RE: [Rcpp-devel] Matrix columns
> 
> 
> Nick,
> 
> I fear that you think that because data.frame is a preferred structure
> in R,
> it also must be in C++. That is not the case, and the reason is the
> internal
> representation of a data.frame at the C (and hence C++) level.  You may
> be
> better off decomposing your data.frame into columns or different types
> (in R
> or C++) or just use a matrix if there is a common type.

What I'm actually hoping to achieve is an improvement to the answer to my
question in
http://stackoverflow.com/questions/5980240/performance-of-rbind-data-frame
(though in doubt that I will improve on it). Apart from that, I'm just
trying to learn Rcpp.
> 
> | > Why is retMat on the right-hand side if you try to fill it?  Makes
> no real
> | sense.
> |
> | >From rcpp-quickref:
> | // Reference the second column
> | // Changes propagate to xx (same applies for Row)
> | NumericMatrix::Column zzcol = xx( _, 1);
> | zzcol = zzcol * 2;
> |
> | Only difference in my code was that I was assigning from a
> NumericVector
> | instead of from an altered version of the original
> NumericMatrix::Column. Or
> | am I mistaken here? I've put it here again:
> | NumericVector curcol = df(i);
> | NumericMatrix::Column cl = retMat( _, i);
> | cl = curcol;//from rcpp-quickref, I understand this alters the
> matrix?
> 
> I believe you to be mistaken. Twice assigning overwrites. Feel free to
> debug
> and test to convince yourself.

Then what's with the comment in rcpp-quickref (// Changes propagate to xx
(same applies for Row))?
As far as I recall (that old effective C++ has gathered quite a bit of dust
by now), the first = is not an assignment but initialization. So I only
assign once (in the last lign). But I'll debug and test to convince myself.

> 
> | * is M(_,i) = V; any different from NumericVector cl = M(_,i);cl=V; ?
> If so,
> | how so?
> 
> As I recall, the former ("one-step") created a compiler error as the
> compiler
> could not disambiguate some intermediate type. The second ("two-step")
> worked, so I used that,  So the difference is that one works :)   [ In
> theory, both should. Patches to make the former work are welcome. ]

Truly lol.

> 
> | * thanks for letting me know _ is part of sugar. I may be able to
> figure out
> | its use now, but isn't this worthy of a mention in rcpp-sugar.pdf?
> 
> As I said a few days ago, patches which enhance documentation or code
> are
> always welcome and will always be properly credited (that is, if we
> agree
> with them and incorporate them).
> 
Intriguingly, I could not find any information on how to get my suggested
"patches" to you, besides a note on your site to "post them on the mailing
list" (admittedly I could have looked better). Do I create a LaTeX file with
additions to the helpfiles and send it here? Or is there a more formal
(read: less annoying for you guys who would then still have to edit it until
it fits the rest of the docs) way? I _do_ intend to try and improve the
documentation, though I don't feel worthy to improve upon the
implementation.

Thanks again!


Nick Sabbe
--
ping: nick.sabbe at ugent.be
link: http://biomath.ugent.be
wink: A1.056, Coupure Links 653, 9000 Gent
ring: 09/264.59.36

-- Do Not Disapprove






More information about the Rcpp-devel mailing list