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?

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-help@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-de...@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-help@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

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to