[R] .Fortran()

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Oct 9 16:21:53 CEST 2001


On Tue, 9 Oct 2001, John Bjornar Bremnes wrote:

> Prof Brian Ripley wrote:
> >
> > On Mon, 8 Oct 2001, John Bjornar Bremnes wrote:
> >
> > > I am trying to call some Fortran subroutines using .Fortran(). These
> > > subroutines have arguments of type 'character', 'real', 'integer', and
> > > 'integer*2'. Is it impossible to call  subroutines expecting both
> > > 'character' and 'real' as input?
> >
> > No, but it is impossible to call those expecting 'integer*2'
>
> Ok, it seems that I can easily avoid using 'integer*2'
>
> > See ?.Foreign for what is supported, and note the comments there about
> > character types: they work on some compilers and not on others.
>
> Is g77 one of those where it does not work? I use R-1.3.0 on linux (PC).

A properly working version of g77 should work on some platforms (including
Linux), but not others (including Windows).

> I have tried the following simple example:
>
>       subroutine mysub(filein, m, x, n)
> c
>       integer        m, n, i
>       character*255  filein
>       real           x(n)
> c
>       write(6,*) 'file: ', filein(1:m)
>       do i=1,n
>          x(i) = sqrt(1.0*i)
>       enddo
>       end
>
> % R CMD SHLIB mysub.f 
> g77   -fPIC  -g -O2 -c mysub.f -o mysub.o
> gcc -shared  -o mysub.so mysub.o -L/usr/local/lib -lg2c -lm
> -L/usr/local/lib -L. -L/usr/lib/gcc-lib/i386-linux/2.95.2 -lm
>
> > dyn.load("mysub.so")
> > .Fortran( "mysub", as.character("myfile"), as.integer(6), as.single(rep(0,10)), as.integer(10), DUP=T )
>  file: myfile
> Segmentation fault (core dumped)

That works for me (RH6.2, gcc 3.0.1, R 1.3.1).
 file: myfile
[[1]]
[1] "myfile"

[[2]]
[1] 6

[[3]]
 [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
 [9] 3.000000 3.162278
attr(,"Csingle")
[1] TRUE

[[4]]
[1] 10

BTW, no one said Fortran I/O would work, and it sometimes is a problem.


> % R
> > dyn.load("mysub.so")
> > .Fortran( "mysub", as.character("myfile"), as.integer(6), as.single(rep(0,10)), as.integer(10), DUP=F )
> Error: character variables must be duplicated in .C/.Fortran

> Any comments?

Do you have one of the many broken Linux versions of g77?

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list