[Rd] is.loaded() and dyn.load()

Simone Giannerini sgiannerini at gmail.com
Thu Apr 5 16:45:12 CEST 2007


Dear all,

I am puzzled at the behaviour of is.loaded() when a dyn.load() call to a a
FORTRAN shared library is included in a file to be sourced.
A reproducible example is the following:

1. the attached fortran subroutine try_it.f90 performs a summation of the
elements of a REAL*8 vector
compile with

gfortran try_it.f90 -shared -s -otry_it.dll

2. create a file to be sourced (see the attached try_it.R) containing the
following commands:

BEGIN try_it.R ************************************
dyn.load("try_it.dll");


try.it <- function(X){
    N <- length(X);
    S <- .Fortran("try_it_",as.double(X),as.integer(N),S=as.double(0))$S
    return(S)
}
END try_it.R ************************************


3. Switch to R

> source("try_it.R")
> try.it(1:10)
Error in .Fortran("try_it_", as.double(X), as.integer(N), S = as.double(0))
:
        Fortran symbol name "try_it_" not in load table
> is.loaded("try_it_")
[1] TRUE
> try.it(1:10)
[1] 55
>
it looks like is.loaded() triggers the loading, inserting
is.loaded("try_it_")in
the file try_it.R does the trick but
is this behaviour expected?

Thank you,

Regards

Simone

> R.version
               _
platform       i386-pc-mingw32
arch           i386
os             mingw32
system         i386, mingw32
status
major          2
minor          4.1
year           2006
month          12
day            18
svn rev        40228
language       R
version.string R version 2.4.1 (2006-12-18)
-- 
______________________________________________________

Simone Giannerini
Dipartimento di Scienze Statistiche "Paolo Fortunati"
Universita' di Bologna
Via delle belle arti 41 - 40126  Bologna,  ITALY
Tel: +39 051 2098262  Fax: +39 051 232153
______________________________________________________


More information about the R-devel mailing list