[R] How to create a function returning an array ?

Kaptue Tchuente, Armel armel.kaptue at sdstate.edu
Fri Jun 28 16:18:50 CEST 2013

@ Duncan, I have already used the syntax that you proposed before asking for help by writing something like 
> read_ts<-function(n,m,img) {
>  out<-.Fortran("read_ts",
>                as.integer(n),
>                as.integer(m),
>                img=as.single(rnorm(n*m)))
> return(out$img)
> alpha<-read_ts(n,m)
> dim(alpha)<-c(n*m)
> alpha<-t(alpha)
My worry with this syntax is that (i) the program is not very efficient because n and m are very big and these two additional instructions (dim(alpha)<-c(n*m and alpha<-t(alpha) can be skipped just by directly declaring img as an array in fortran instead of a vector and (ii) the syntax will become more complex dealing with a multidimensional array instead of a matrix as in this example.
And this is why I'm looking for the correct instruction to declare img as an array instead of a vector.


-----Original Message-----
From: Duncan Murdoch [mailto:murdoch.duncan at gmail.com] 
Sent: Friday, June 28, 2013 8:16 AM
To: David Winsemius
Cc: Kaptue Tchuente, Armel; r-help at r-project.org
Subject: Re: [R] How to create a function returning an array ?

On 27/06/2013 11:38 PM, David Winsemius wrote:
> On Jun 27, 2013, at 8:04 PM, Kaptue Tchuente, Armel wrote:
> > Hi there,
> >
> > I would like to know how to change the line 
> > "img=as.single(rnorm(m)))" such that instead of being a vector of 
> > length m as it is now, img is an array of dimension c=(n,m,o) for 
> > instance
> >
> > ---------------------------------
> > read_ts<-function(n,m,o,img) {
> >   out<-.Fortran("read_ts",
> >                as.integer(n),
> >                as.integer(m),
> >                as.integer(o),
> >                img=as.single(rnorm(n)))
> >   return(out$img)
> > ------------------------------------------
> >
> Well, assuming that  the 'out$img' object has a R-length of n*m*o , wouldn't if be simpler to just change the return call to:

In fact, out$img has a length of n, same as on input.  .Fortran won't change the length of its arguments.

Duncan Murdoch

> return( array( out$img, dim=c(n,m,o) )
> I don't think you wnat start naming your dimension vectors "c".

More information about the R-help mailing list