Rohit, Please stop cross-posting to r-help. I have removed the list from the CCs now.
On 19 February 2011 at 22:51, Rohit Pandey wrote: | Hi Douglas, | | Sorry for leaving that information out earlier. | | I am running windows XP. I'm not sure about the tools you mention. I thought | installing the packages in R was enough. Are these tools like a program you | install? You need a compiler. Start by reading Appendix D of the 'R Administration' manual available with your R installation as well as on all mirrors. I am adding something to the Rcpp-FAQ vignette to that effect now. Dirk | The results of running sessionInfo() are: | | R version 2.12.1 (2010-12-16) | Platform: i386-pc-mingw32/i386 (32-bit) | | locale: | [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United | States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC= | C | [5] LC_TIME=English_United States.1252 | | attached base packages: | [1] stats graphics grDevices utils datasets tcltk | methods base | | | | On Sat, Feb 19, 2011 at 9:21 PM, Douglas Bates <ba...@stat.wisc.edu> wrote: | | On Sat, Feb 19, 2011 at 12:56 AM, Rohit Pandey <rohitpandey...@gmail.com> | wrote: | > Hi Christopher/ Dirk, | | > Thank you very much for your replys. I think the idea of using inline as | you | > suggest is the best way to start off with using c++ with R. I went | through | > your examples and also plenty I found on the net. I have been trying to | run | > some of these over the past few days, but have consistently been getting | > this error message as soon as I run the 'cfunction' or 'cxxfunction'. For | > example, in the syntax that Dirk sent, | > R> library(inline) #Runs perfectly | > R> src <- 'std::cout << "Hello C++_From_R World" << std::endl; | > return(Rcpp::wrap(42));' #Runs perfectly | > R> rohit <- cxxfunction(signature(), src, plugin="Rcpp") | > Now, as soon as I run this line, R spills a whole lot of text out and | gives | > an error and a warning: | > ERROR(s) during compilation: source code errors or compiler configuration | > errors! | > Program source: | > 1: | > 2: // includes from the plugin | > 3: | > 4: #include <Rcpp.h> | > 5: | > 6: | > 7: #ifndef BEGIN_RCPP | > 8: #define BEGIN_RCPP | > 9: #endif | > 10: | > 11: #ifndef END_RCPP | > 12: #define END_RCPP | > 13: #endif | > 14: | > 15: using namespace Rcpp; | > 16: | > 17: | > 18: // user includes | > 19: | > 20: | > 21: // declarations | > 22: extern "C" { | > 23: SEXP file59046688( ) ; | > 24: } | > 25: | > 26: // definition | > 27: | > 28: SEXP file59046688( ){ | > 29: BEGIN_RCPP | > 30: std::cout << "Hello C++_From_R World" << std::endl; | > return(Rcpp::wrap(42)); | > 31: END_RCPP | > 32: } | > 33: | > 34: | > Error in compileCode(f, code, language = language, verbose = verbose) : | > Compilation ERROR, function(s)/method(s) not created! | > In addition: Warning message: | > running command 'C:\PROGRA~1\R\R-212~1.1/bin/i386/R CMD SHLIB | > file59046688.cpp 2> file59046688.cpp.err.txt' had status 1 | > | > The "file59046688.cpp 2" changes every time I run a different function, | but | > the problem seems to be the same. | > | > I installed and loaded the inline package (0.3.8) and then the Rcpp | package | > (0.9.0). I also tried reversing the order in which I load these, but | still | > no luck. I think if I can get just one of these programs to work, I will | be | > on my way. Can any of you tell me what I might be doing wrong? | > | > For your question on what exacly I require, Christopher - I just need to | use | > a while loop. I have always been able to substitute for loops with some | of | > the apply functions in R, but can't seem to be able to replace the while | > with a more efficient function. But the things that are required inside | the | > while loop, I have already implemented in R efficiently. So, I thought of | > transfering just the while loop to a language that is faster with loops. | | What operating system and version of R are you using? It would help | if you included the results of executing | | sessionInfo() | | in R. More importantly, do you have the compiler tools installed and | configured? You need to have certain tools installed on Windows or | Mac OS X before you can compile packages (as opposed to installing | pre-compiled binary packages). Most Linux distributions assume that | their users are adults and provide them with the tools to compile | programs. | | > | > Thanks in advance. | > On Mon, Feb 7, 2011 at 6:21 AM, Wray, Christopher < | > christopher.wray...@ucl.ac.uk> wrote: | > | >> As Dirk says, using "inline" makes it real simple to start and to | prototype | >> code. | >> | >> You mention you have R functions you wish to "call" via Rcpp. Im not | >> certain I fully understand what you require here, but it is pretty | simple to | >> pass R-side functions to C++ via Rcpp, and similarly its simple to send | >> compiled functions back to R-side as external pointers (and reuse them | >> elsewhere). Here is a toy example using a simple "user" function defined | on | >> the R-side (user_F). | >> | >> This is evaluated in R, passed as a "function" parameter to compiled C++ | >> function and evaluated there, and then a compiled version of the | function is | >> passed back to R as an external pointer, which you can send back to the | C | >> side and evaluate: | >> | >> <R> user_F=function(v){sum((1-v)*exp(-0.5*v))} | >> | >> cpp <- ' | >> NumericVector numvec(xvec); | >> NumericVector RetVec; | >> Function userR_f(fun); | >> List ATR; | >> typedef SEXP (*h_ptr)(SEXP); | >> RetVec = userR_f(numvec); | >> ATR["Fn_ptr"]=XPtr<h_ptr> (new h_ptr(&fme)); | >> ATR["Fn_VAL"]=RetVec; | >> return ATR; | >> ' | >> inc<-' | >> using namespace Rcpp; | >> SEXP fme(SEXP x){ | >> NumericVector xx(x); | >> NumericVector yy=(1-xx)*exp(-0.5*xx); | >> double Ans=sum(yy); | >> return wrap(Ans); | >> } | >> ' | >> <R> FN_CSide <- cxxfunction(signature(xvec = "numeric", fun = "function" | >> ),cpp, , plugin = "Rcpp", includes = inc) | >> | >> cppP <- ' | >> typedef SEXP (*h_ptr)(SEXP); | >> XPtr<h_ptr>p(x); | >> NumericVector yy(y); | >> yy=(*p)(yy); | >> return yy; | >> ' | >> <R> px<-cxxfunction(signature(x = "externalptr", y = "numeric" ),cppP, , | >> plugin = "Rcpp", includes = "using namespace Rcpp; ") | >> | >> <R> R_side=FN_CSide(seq(1,5),user_F) | >> <R> user_F(seq(1,5)) | >> [1] -1.548486 | >> <R> R_side | >> $Fn_ptr | >> <pointer: 0x0964c608> | >> $Fn_VAL | >> [1] -1.548486 | >> <R> px(R_side$Fn_ptr,seq(1,5)) | >> [1] -1.548486 | >> | >> I've broken it out to make the logic explicit. The above is sloppy - and | >> makes no attempt to treat memory de/allocation/gc/protection issues | (which | >> you should consider) especially if you pass objects around, but it does | try | >> to show you how the mechanics work. | >> | >> Aside from looking up the Rcpp::sugar functionality used in places | above, | >> you might also want to look at package "RcppArmadillo", if functions and | >> calculations involve linear algebra calcs/matrix operations. Hopefully | this | >> gives you some food-for-thought to delve further into the | >> archives/documentation to find what you need. | >> chris | >> | >> | >> | >> ________________________________________ | >> From: rcpp-devel-boun...@r-forge.wu-wien.ac.at [ | >> rcpp-devel-boun...@r-forge.wu-wien.ac.at] on behalf of Dirk Eddelbuettel | [ | >> e...@debian.org] | >> Sent: 06 February 2011 18:18 | >> To: Dirk Eddelbuettel | >> Cc: Rohit Pandey; rcpp-devel | >> Subject: Re: [Rcpp-devel] [R] Help with integrating R and c/c++ | >> | >> [ Now resending to rcpp-devel as I had said below I would --Dirk ] | >> | >> 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-h...@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<http://www.r-project.org/ | posting-guide.html> | >> | and provide commented, minimal, self-contained, reproducible code. | >> | >> -- | >> 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 | > | > | > | > | > -- | > Thanks, | > Rohit | > Mob: 91 9819926213 | > | > [[alternative HTML version deleted]] | > | > ______________________________________________ | > r-h...@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. | > | | | | | -- | Thanks, | Rohit | Mob: 91 9819926213 | -- 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