Sorry, my example was just to give you a rough idea of how to do  
this.  Here is an example that works.

myrandom.c:

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

void F77_SUB(fseedi)(void)
{
   GetRNGstate();
}


void F77_SUB(fseedo)(void)
{
   PutRNGstate();
}


void F77_SUB(myrbeta)(double* px, double* pa, double* pb)
{
	*px = rbeta(*pa, *pb);
}


and example.f

       subroutine example(x, a, b)
       implicit double precision (a-h,o-z)
       call fseedi()
       call myrbeta(x, a, b)
       call fseedo()
       end



Note: it is important that there are 6 spaces at the beginning of  
each line.

Also, don't do this:

void F77_SUB(myrbeta)(double* px)
{
     GetRNGstate();
     *px = rbeta(1.00,3.00);
     PutRNGstate();
}

It spends more time seeding the random number generator than  
generating random numbers.

Regards,
Kjell



On Feb 14, 2009, at 11:09 AM, Fabio Mathias wrote:

> As I am wanting to generate a beta, then I created a function in C  
> to generate a beta, but the problem appears when I go to compile
>
> My function in C is
>
> #include <R.h>
> #include <Rmath.h>
> #include <math.h>
>
> void F77_SUB(myrbeta)(double* px)
> {
>     GetRNGstate();
>     *px = rbeta(1.00,3.00);
>     PutRNGstate();
> }
>
> My function in Fortran is
>
> subroutine blah(a)
> double precision (a)
> call myrbeta(RND)
> end
>
> The error
>
> fmcron@fmcron-desktop:~/teste$ R CMD SHLIB mat.c blah.f
> gcc -std=gnu99 -I/usr/share/R/include      -fpic  -g -O2 -c mat.c - 
> o mat.o
> gfortran   -fpic  -g -O2 -c blah.f -o blah.o
> blah.f:1.1:
>
> subroutine blah(a)
> 1
> Erro: Non-numeric character in statement label at (1)
> blah.f:1.1:
>
> subroutine blah(a)
> 1
> Erro: Unclassifiable statement at (1)
> blah.f:2.1:
>
> double precision (a)
> 1
> Erro: Non-numeric character in statement label at (1)
> blah.f:2.1:
>
> double precision (a)
> 1
> Erro: Unclassifiable statement at (1)
> blah.f:4.1:
>
> end
> 1
> Erro: Non-numeric character in statement label at (1)
> blah.f:4.1:
>
> end
> 1
> Erro: Unclassifiable statement at (1)
> make: ** [blah.o] Erro 1
>
>
>              Fábio Mathias Corrêa
>                        UFLA
>
>
> --- Em sex, 13/2/09, Kjell Konis <kjell.konis@epfl.ch> escreveu:
> De: Kjell Konis <kjell.konis@epfl.ch>
> Assunto: Re: [Rd] Generate random numbers in Fortran
> Para: "fabio.ufla@yahoo.com.br" <fabio.ufla@yahoo.com.br>
> Cc: "r-devel@r-project.org" <r-devel@r-project.org>
> Data: Sexta-feira, 13 de Fevereiro de 2009, 16:49
>
> Take a look at section 6.6 in Writing R Extensions. It describes  
> how to call C
> functions from FORTRAN.
>
>  Basically it just boils down to this, in a C file define
> the functions
>
> void F77_SUB(fseedi)(void)
> {
>   int x = 100;
>   seed_in(&x);
> }
>
>
> void F77_SUB(fseedo)(void)
> {
>   int x = 100;
>   seed_out(&x);
> }
>
>
> void F77_SUB(myrunif)(double* px)
> {
> 	*px = unif_rand();
> }
>
>
> Then you could write a FORTRAN subroutine like
>
>       subroutine blah()
>       implicit double precision (a-h,o-z)
>       call fseedi()
>       call myrunif(RND)
>       call fseedo()
>       end
>
> The fseed* subroutines only need to be called once, fseedi at the  
> beginning of
> your FORTRAN code and fseedo at the end.
>
> HTH,
> Kjell
>
>
> On 13 févr. 09, at 17:32, Fabio Mathias wrote:
>
> > Hi!!!
> > It would like to know if it exists a form to use the functions to
> > generate variates in FORTRAN with the same easiness I use that  
> them in
> > C? Or not?
> > If yes. They
>
>  would have some example? I would like to use the functions
> rbeta, rlnorm and others!
> >
> >
> > Sorry my english..rsrsrs
> >
> > Thanks!!!
> >
> >
> >              Fábio Mathias Corrêa    University Federal of the  
> Lavras -
> Brazil
> >
> >
> >
> >      Veja quais são os assuntos do momento no Yahoo! +Buscados
> >
> > 	[[alternative HTML version deleted]]
> >
> > <ATT00001.txt>
>
>
> Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10  
> - Celebridades - Música - Esportes


	[[alternative HTML version deleted]]

