[R] How to read a direct access file by connecting fortran with R ?

Kaptue Tchuente, Armel armel.kaptue at sdstate.edu
Fri Apr 19 13:44:23 CEST 2013


Dear Suzen,

Thank you for your reply.

I don't know why but it looks like my previous mail was truncated.
Here is the R function (described in the step #4 in my previous mail) that I wrote. It contains .Fortran but like I said earlier, it didn't work.
************************************
img<-c(n_col)
Read_binary<-function(n_samples,line,type) {
   as.integer(n_samples),
   as.intger(line),
   as.integer(typ),
   img=as.single(img) 
}
************************************

Armel

-----Original Message-----
From: mehmet.suzen at gmail.com [mailto:mehmet.suzen at gmail.com] On Behalf Of Suzen, Mehmet
Sent: Friday, April 19, 2013 3:17 AM
To: Kaptue Tchuente, Armel
Subject: Re: [R] How to read a direct access file by connecting fortran with R ?

On 19 April 2013 07:05, Kaptue Tchuente, Armel <armel.kaptue at sdstate.edu> wrote:
> Hello all,
>
> I would like to read the specific line number row of a direct access file (which is stored as a n_row*n_col matrix of elements kind=p) without reading all the preceding lines (i.e 1,2,..,row-1).
>
> Is there a function in R that can perform this task?
>
> To solve my issue, I tried without to call Fortran from R by doing the following steps:
>
> I) I wrote a subroutine in fortran called read_binary.f90
> ************************************
> Subroutine read_binary (n_col,row,img)
>
>    integer*1    :: im1(n_col)
>    integer*1    :: im2(n_col)
>    integer*1    :: im2(n_col)
>
>    open(10,file=binary_file,access=direct,action=read,status='old',recl=n_col*p)
>    if(p==1) then
>      read(10,rec=row) img1
>       img=img1
>    else if(p==2) then
>       read(10,rec=row) img2
>       img=img2
>    else
>      read(10,rec=row) img3
>       img=img3
>    endif
>    close(10)
>
> End subroutine read_binary
> ************************************
>
> II) R CMD SHLIB read_binary.f90
>
> III) dyn.load("read_libray.so")
>
> IV) Then in R,  I tried many variant of the following function but I 
> wasn't able to store the line number row into the vector img


At this stage you need to use .Fortran;

  .Fortran("read_binary", as.integer(n_samples),  as.intger(line), img=as.single(img));

See ?.Fortran


More information about the R-help mailing list