[R] rgamma function

Thomas Lumley tlumley at uw.edu
Mon Jul 16 23:21:55 CEST 2012


On Mon, Jul 16, 2012 at 12:49 PM, Chandler Zuo <zuo at stat.wisc.edu> wrote:
> Sorry that I posted the wrong syntax. My initial program is very long and I
> tried to post the section where I have been narrowed to locate the problem.
>
> In this sample I am simulating a Gamma with size parameter 5000 and scale
> parameter 1.
>
> I plugged in many breaks in my initial program and what I found was that
> most of the time the program stops when encountering a call to rgamma()
> function. It just freezes without popping out any error.
>
> #include<Rmath.h>
> #include<time.h>
> #include<Rinternals.h>
>
> SEXP generateGamma ()
> {
>     SEXP a;
>     PROTECT(a=allocVector(REALSXP,1));
>     srand(time(NULL));
>     REAL(a)[0]=rgamma(5000,1);
>     UNPROTECT(1);
>     return (a);
> }
>

srand() isn't relevant to the R random number generator, and you
haven't included the header file that defines it (this should lead to
a warning about implicit declaration).

More importantly, you haven't included the R equivalents GetRNGstate()
and PutRNGstate().  You want something like

#include "R.h"
#include<Rmath.h>
#include<Rinternals.h>

SEXP generateGamma ()
{
    SEXP a;
    PROTECT(a=allocVector(REALSXP,1));
    GetRNGstate();
    REAL(a)[0]=rgamma(5000,1);
    PutRNGstate();
    UNPROTECT(1);
    return (a);
}

    - thomas

-- 
Thomas Lumley
Professor of Biostatistics
University of Auckland



More information about the R-help mailing list