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
fmc...@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 <[email protected]> escreveu:
De: Kjell Konis <[email protected]>
Assunto: Re: [Rd] Generate random numbers in Fortran
Para: "[email protected]" <[email protected]>
Cc: "[email protected]" <[email protected]>
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
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel