On 04/03/2016 3:34 AM, MAURICE Jean - externe wrote:
Hi,
I am a FORTRAN developer and I am 'translating' R functions in FORTRAN
subroutines. I am 'new' to R. It's my first question in this mailing-list and
English is not my natural language.
Very often, an R function gives an 'array' as result and you don't have to
bother with the dimension of the array : R creates automatically an array with
the good length. It's not really the case with FORTRAN. I call FORTRAN
subroutines with .fortran().
Until now, I create an array with the 'max' dimensions in R, give it to
FORTRAN; FORTRAN updates the array and R retrieves it. But calculating the
'max' before calling the FORTRAN subroutine can be complicated. Is it possible
to create a 'new' array in a FORTRAN subroutine and to make it be read by R ?
I don't think this is possible in pure Fortran, but it is certainly
possible in C or C++ code. You need to call the external routine using
.Call() instead of .C or .Fortran. See the section 5.9 of the Writing R
Extensions manual for details.
Or is it possible to have a 'pointer' in R, to give it to the FORTRAN
subroutine where an ALLOCATE can create the array and then R works with the
array ?
No. R needs to manage allocations of all the objects it uses. However,
if you never need to use these arrays in R code (you just want R to keep
references to them to pass to other external routines), you can (in C or
C++) use the external pointer type. I don't think there's any support
for that in Fortran.
The other solution, is to work with dummies dimension in FORTRAN (REAL*8
array1(*)) but can R work with that ?
No, for the same reason.
Duncan Murdoch
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel