OK, here's the first-cut code, which does execute properly. What I would like to do, simply for 'cleanliness', is to assign "nothing" to the variable "l" , rather than assigning "seq(1,dim(data)[timedim])". Then the result of all the get(unlist(dims)) operations below will be

func[j,k,]

Where right now the code returns func[j,k,seq(1:length(dim(data)[timedim]))]


Linewraps below have broken the definition of jmap() into at least 3 lines, btw.

What this function, timecalc(), does is to calculate the selected 'func' over the specified dimension of the data, returning a 2-dimensional array of the calculated values. Think, for example, of a FITS data stack, and calculating the mean intensity in each spatial pixel over the full time-sequence of frames.


************
#generic version, for 'any' function and any axis (3-D data only)
timecalc<-function( data, func=mean, timedim=3) {
        # build a "[,j,k]" string where the blank is for
        # the timedim selected.  I can't find a way to create a true "blank"
        # which is why I load the seq(1:N) in there
        #  (put error checkers on length of dim later)
dims<-as.list(dim(data))
dims[-timedim]<-c('j','k')
#sloppy way to extract the time-sequence, but lets me 'unlist' all 3 dims
dims[[timedim]]<-'l'
l<-seq(1,dim(data)[timedim])
alldim<-seq(1,3)  # just create a holder
# define the two dims which are NOT summed over, i.e. we'll return an array
# of size scandim[1]xscandim[2], each element is func-ed over 3rd dim
scandims<-alldim[alldim!=timedim]
        funcname<-deparse(substitute(func))
        datname<-deparse(substitute(data))
jmap<-function(k) mapply(function(j) eval(call(funcname,get(datname)[get(unlist((dims[1]))),get(unlist(dims[2])),get(unlist(dims[3]))])), j=seq(1:dim(data)[scandims[1]]))
mapply(jmap,k=seq(1:dim(data)[scandims[2]]))->bar
return(invisible(bar))
}
*******************


David Winsemius wrote:
It certainly seems possible that it is more complex, but at the moment I don't think it is possible to any more vague.

The specifics of implementation will depend on the precise meaning assigned to the words "a function", "index", "axis", "dimension", "each element of which is the sum of all values along the third axis". At the moment those appear to be unfortunately imprecisely described.

The quick answer to your first questions is yes, it is possible to create structures with nothing in them. Emply vectors, empty arrays, sparse matrices, and empty lists are all feasible. Make up your mind what you want and then articulate it.

some the the function sthat may do what you want are:

apply
integrate
lapply

All of the specifics depend ... on specifics.


______________________________________________
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