Many thanks for your reply. Rf_rnorm works very good with me. Xiaochun
On Fri, Jan 21, 2011 at 7:38 AM, Dirk Eddelbuettel <e...@debian.org> wrote: > > On 21 January 2011 at 06:44, Douglas Bates wrote: > | It is more effective to send such inquiries to the Rcpp-devel mailing > | list which I am cc'ing on this reply. > > Correct. > > | On Thu, Jan 20, 2011 at 3:05 PM, mtck1982 <xiaoch....@gmail.com> wrote: > | > > | > Hi All, > | > > | > I am new to this area and use Rcpp to call C++ from R and try to build > the > | > package under Windows 7. I use Rtools and R 2.10.1 32bit. Everything > works > | > fine with me, except using R functions like "rnorm" or "runif" in the > C++ > | > code. When I use "R CMD check" the package, it always return error > | > > | > ** libs > | > making DLL ... > | > g++ -I"c:/PROGRA~2/R/R-210~1.1/include" > | > -I"c:/PROGRA~2/R/R-210~1.1/library/Rcpp/include" -O2 -Wall -c > func.cpp > | > -o func.o > | > func.cpp: In function 'SEXPREC* myfunction(SEXPREC*, SEXPREC*)': > | > func.cpp:220: error: 'rgamma' was not declared in this scope > | > func.cpp:225: error: 'rnorm' was not declared in this scope > | > func.cpp:244: error: 'runif' was not declared in this scope > | > func.cpp:274: error: 'rbeta' was not declared in this scope > | > make: *** [func.o] Error 1 > | > ... don > | > | It is not clear if you are trying to use the Rcpp "sugar" > | constructions, which can apply to entire vectors, of if you are using > | the functions in the R API. If the latter then you will need to > | preface the name with Rf_, as in Rf_runif. Those are the actual names > | of the functions. The Rinternals.h file defines a number of aliases, > | such as runif, but in Rcpp those aliases are turned off, so as to > | avoid name clashes. > | > | You should note that when calling random number generator functions > | the programmer is responsible for getting and restoring the seed > | structure. I can't remember the details right now and I am on a > | Windows system without the sources so I will rely on someone else to > | fill in the details. > > The easiest is to just declared a variable of type > > Rcpp::RNGScope > > which saves state when entering the local scope (ie "set of curly braces") > and restores it when leaving, thanks to what one can do with C++. Here is > an example Romain wrote to the rcpp-devel list in October: > > In addition, we have the RNGScope class, whose constructor calls=20 > GetRNGstate and destruvctor calls PutRNGstate, so that you can do : > > fx <- cxxfunction( , ' > RNGScope scope ; > NumericVector x = rgamma( 10, 1, 1 ) ; > return x ; > ', plugin="Rcpp" ) > > fx() > > That's self-contained example for inline, using the rgamma sugar function. > You need the Rcpp:: prefix or a 'using namespace Rcpp;' when you use that > in > your own source code. > > Dirk > > -- > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com > -- PhD student Quantitative/Statistical Genetics and Plant Breeding Illinois Plant Breeding Center, University of Illinois Urbana, IL 61801 Phone(Cell):785-217-4242 [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel