[R] Help with integrating R and c/c++

Dirk Eddelbuettel edd at debian.org
Sun Feb 6 19:12:29 CET 2011


On 6 February 2011 at 20:58, Rohit Pandey wrote:
| Hi,
| 
| I have been using R for close to two years now and have grown quite
| comfortable with the language. I am presently trying to implement an
| optimization routine in R (Newton Rhapson). I have some R functions that
| calculate the gradient and hessian (pre requisite matrices) fairly
| efficiently. Now, I have to call this function iteratively until some
| convergance criterion is reached. I think the standard method of doing this
| in most programming languages is a while loop. However, I know R can get
| pretty slow when you use loops. In order to make this efficient, I want to
| transfer this part of my code to a more efficient programming language like
| c++ or c. However, I have been trying to learn this all day without any
| luck. I found a package called Rcpp that makes this easier. However, it
| seems some functional knowledge of writing R packages is a pre requisite. I

What gave you that impression?  

Here is a counter-example, using the packages inline (for cxxfunction) and Rcpp:

  R> library(inline)
  R> src <- 'std::cout << "Hello C++_From_R World" << std::endl; return(Rcpp::wrap(42));'
  R> rohit <- cxxfunction(signature(), src, plugin="Rcpp")
  R> rohit()
  Hello C++_From_R World
  [1] 42
  R>  

This compiled, linked and loaded a C++ routine built from the two-statement
program submitted as character variable.

The Rcpp documentation, including its eight vignettes, is full of other
examples. Start with Rcpp-introduction and maybe the Rcpp-FAQ.

| tried to follow the standard manual for doing this, but could not find a
| simple example to get me started. I know I am supposed to make a cpp file
| and put it some where before it can be called from R, but I'm confused as to
| how this can be done.
| 
| My requirement is to start with a parameter vector, update it according to
| the gradient and hessian, check if the parameter satisfies some convergance
| criterion and continue doing this until it does. Is there a way to
| efficiently do this through an R function (replicate?). The problem is that
| the number of iterations is not fixed. If there is no function in R, is
| there a way I can quickly use Rcpp or some thing to have this last part of
| my code in a C or C++ program which repeatedly calls my R functions for
| updating the parameters?

Give the example above a first try, and then read some more. The archives of
the rcpp-devel (CC'ed; post there for follow-ups after subscribing) list are
full of examples, and the CRAN page for Rcpp lists almost two dozen other
packages using Rcpp giving you plenty of examples should you want to write a
package using Rcpp. Several of these packages do optimization giving you
examples of you to pass parameters etc pp.

Hope this helps, Dirk

| 
| -- 
| Thanks in advance,
| Rohit
| Mob: 91 9819926213
| 
| 	[[alternative HTML version deleted]]
| 
| ______________________________________________
| R-help at r-project.org mailing list
| https://stat.ethz.ch/mailman/listinfo/r-help
| PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
| and provide commented, minimal, self-contained, reproducible code.

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com



More information about the R-help mailing list