On 30 November 2012 at 07:57, Gabor Grothendieck wrote: | to wrestle with SEXPs. If the alternative is to work with SEXPs | directly then the alternative certainly is painful but if the | alternative is to use .C (and that may not be a feasible alternative | in some or many cases due to its restricted applicability) its not | painful at all.
That is true. If one wanted to, say, just sum up a single vector of doubles a simple .C may be easier to use that wrangling with SEXP via .Call. But consider this: a) Simon's point I just quoted about this being dangerous as you are bound to run over the limits (frequent source of error on messages on list) b) the fact that thanks to JJ's work it is now even easier to just pass a vector down an get a result back: we just write double mysum(NumericVector x) { return std::accumulate(x.begin(), x.end(), 0.0); } without pointers, memory, indices, ... trapping us. And creating that function is now a single call: R> cppFunction("double mysum(NumericVector x) { return std::accumulate(x.begin(), x.end(), 0.0); }") R> mysum(1:100) [1] 5050 R> And again, this uses SEXP as only SEXP gives us the handles Rcpp exploits to allow for these nice interface. Simple things, easily done, with nicer interfaces. Dirk -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel