Hello,

I am trying to run a piece of Fortran code from R, and I am having trouble 
passing an array to the fortran subroutine.   My attempts to pass an array into 
the fortran are producing memory errors, and I cannot find an example that 
performs the task.  I have looked at "Writing R Extensions", and understand in 
concept what needs to happen, but all the examples are written in C.

Below are my fortran subroutine, the R function that calls it, and the R output.


====== foo.F90 ======

SUBROUTINE testRwrapper(n)

  DOUBLE PRECISION :: n(:)
  INTEGER :: i

  !  answer = factorial(n)
  do i=1,3
     n(i) = n(i) + i/1.0
  end do

END SUBROUTINE testRwrapper

====== test.R ======


foo <- function(n) {
  # If the library hasn't been loaded yet, load it
  if (!is.loaded('testRwrapper')) { dyn.load('foo.dylib') }

  returned_data = .Fortran('testRwrapper',
    n=as.double(n))#,
  # Return the value of the result parameter
  return(returned_data$n)
}

====== R result ======

> source('test.R')
> foo(c(1.1, 2.2, 3.3, 4.4))

 *** caught segfault ***
address 0x3ff19999, cause 'memory not mapped'

Traceback:
 1: .Fortran("testRwrapper", n = as.double(n))
 2: foo(c(1.1, 2.2, 3.3, 4.4))

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

=========================

I have tried various combinations of pointers in the fortran subroutine.  I can 
pass a single value without a problem.  That is,  eliminating the do loop from 
foo.F90 and making n a scalar works.  Could someone suggest the proper Fortran 
syntax, or point me toward an F90/R example?

Many thanks,
Tim

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to