On Wed, May 26, 2010 at 10:21 AM, Romain Francois <[email protected]> wrote: > Le 26/05/10 18:55, Vinh Nguyen a écrit : >> >> Dear Rcpp list, >> >> It's time for me to finally try out Rcpp > > Great. You won't regret it ;-) >
Thanks for the prompt response. My only initial hesitation about using Rcpp is the uncertainty in the availability of support and development in the future. I know .C() and .Call() will always be available so long as R is in business (and it looks like it will be around for the rest of my life!). I'm not an expert in programming so I'd hate to re-program things down the line. However, observing the vibe on the list and that Prof. Bates is also using it, I feel very relieved =]. Keep up the good work! >> since I have to do some >> computing for my research. Some questions (please be kind as I'm only >> a beginner C programmer using .C() and not smart enough to understand . >> Call()): > > This is where Rcpp comes in. It will make you forget that .Call looks silly > and complicated. .C seems easier, but that is an illusion. > >> 1. I plan to use objects like >> Rcpp::NumericMatrix orig(matrix); >> to store. To confirm, storing to orig directly stores into the >> original R object matrix right? >> orig(i,j) = some double; > > Yes. Rcpp classes of the new api (e.g. Rcpp::NumericMatrix) act as a > wrapper. They change the way you look at the R object, but not the object > itself. > > However, if you pass a SEXP that really is an integer matrix, Rcpp will cast > it to a numeric matrix. see the thread : > http://permalink.gmane.org/gmane.comp.lang.r.rcpp/369 for how that might > byte you if you are not aware of it. > >> 2. int n = orig.rows(); >> Where can I find documentation on all the functions associated with >> the class? I'd like to know all the available functions plus >> information about it (for example, the above returns an int). > > Dirk maintains a this http://dirk.eddelbuettel.com/code/rcpp/html/index.html > generated by doxygen. Some people like it. > > The issue with classes like NumericMatrix is that they are generated from a > template and this makes it difficult for things like doxygen to produce > something nice. (some people don't like it) > Yea, don't see information on NumericMatrix or stuff from the "new" API. > One approximate way is to grep around the unit tests. We do have quite a > good coverage and we try to stress each functionality of Rcpp. > > Otherwise the source code. > >> 3. Is there a class for multidimensional arrays? I'm thinking of >> array() in R. I use something like >> S2[i + (*nObs)*j + (*nObs)*(*nParam)*k] = ...; >> for all vectors, matrices, and arrays in C, and this is a pain as it >> is a souce of a lot of my errors. > > Not currently. Not that it is difficult to achieve, but it has to raise up > on our list of priorities. > I'll stick to my single dimensional arrays then. >> 4. My original code is using nlm() in R to fit my model. However, I >> think it is best to do the Newton-Raphson directly in C/C++. Can some >> how evaluate matrix multiplication using "%*%" in R directly in my C++ >> code (using the Rcpp::NumericMatrix class)? > > we don't currently have operators on Rcpp types. maybe some day. > > we however developped the RcppArmadillo package, which gives you the full > power of armadillo (http://arma.sourceforge.net/) plus the convenience of > Rcpp, at a small cost (see examples in RcppArmadillo) > At first I wanted to refrain from this since I didn't want to get too complex as I'm learning how to use Rcpp. However, after reviewing your recent example more thoroughly, it doesn't seem too complicated. To confirm, returning a colvec and matrix objects from arma is OK (R will understand)? >> 5. How do I return a list in R that consists of a value, vector, and >> matrix? The three can be allocated in C++ or allocated prior to >> entering C++ and passed on in .Call()? > > Something like this: > > > using namespace Rcpp ; // for _ > > IntegerVector z(5) ; > NumericMatrix foo( 3, 4 ); > return List::create( > _["x"] = 2, > _["z"] = z, > _["foo"] = foo ) ; > > > You don't need to (but you can if you want) allocate things before. I told > you .C was only easier by illusion ;-) > > In fact, with Rcpp you don't have to care too much about allocation, etc ... > and you can concentrate on the problem you are trying to solve rather than > fighting with the R API. > >> 6. How do I compile the .cpp file on the >> command line? I got the following based on Dirk's HPC talk but >> getting errors on my mac os x: > > The easiest way by far is to make a package and follow the guidelines of our > last release notes. See the section "Using Rcpp in other packages" here > http://romainfrancois.blog.free.fr/index.php?post/2010/05/17/Rcpp-0.8.0 > > > The next easy way is to build on the smartness of the inline package. With > verbose = TRUE, it will show you how to run the show: > > fx <- cppfunction( , "return R_NilValue ;", verbose = TRUE ) > > Ahh I see. >> $ PKG_CPPFLAGS='r -e'Rcpp:::CxxFlags\(\)'' PKG_LIBS='r >> -e'Rcpp:::LdFlags\(\)'' R CMD SHLIB rcpp.cpp >> g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include >> -I/Library/Frameworks/R.framework/Resources/include/x86_64 r >> -eRcpp:::CxxFlags() -I/usr/local/include -fPIC -g -O2 -c rcpp.cpp >> -o rcpp.o >> /bin/sh: -c: line 0: syntax error near unexpected token `(' >> /bin/sh: -c: line 0: `g++ -arch x86_64 >> -I/Library/Frameworks/R.framework/Resources/include >> -I/Library/Frameworks/R.framework/Resources/include/x86_64 r >> -eRcpp:::CxxFlags() -I/usr/local/include -fPIC -g -O2 -c rcpp.cpp >> -o rcpp.o' >> make: *** [rcpp.o] Error 2 >> >> If I get these things going then I'd be happy to release the code as >> an example on using Rcpp to do maximization/model fitting. > > We look forward to it. > >> Thanks. >> Vinh > > -- > Romain Francois > Professional R Enthusiast > +33(0) 6 28 91 30 30 > http://romainfrancois.blog.free.fr > |- http://bit.ly/cork4b : highlight 0.1-8 > |- http://bit.ly/bklUXt : RcppArmadillo 0.2.1 > `- http://bit.ly/936ck2 : Rcpp 0.8.0 > > _______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
