[R] filling an array, vectorized
Robin Hankin
r.hankin at noc.soton.ac.uk
Thu Nov 16 09:21:32 CET 2006
Tamas
first of all, Thank You for a really well-posed, interesting problem.
Answer follows.
do.index <- function(a,f){
jj <- function(i){seq_len(dim(a)[i])}
index <- as.matrix(expand.grid(sapply(1:length(dim
(a)),jj,simplify=FALSE)))
a[index] <- apply(index,1,f)
return(a)
}
f <- function(l){
sum(unlist(l))
}
a <- array(0,c(2,3,4))
b <- array(0,c(2,2,2,2))
do.index(a,f)
do.index(b,f)
best wishes
Robin
On 15 Nov 2006, at 19:16, Tamas K Papp wrote:
> Hi,
>
> I am sure this has come up before, but my searches of the archive
> didn't give any results (maybe I didn't use the right keywords, but if
> I use too many, the search times out).
>
> I have a vector of dimensions n, length is not fixed, eg
>
> n <- c(4,5,7)
>
> or
>
> n <- c(19,4,5,7)
>
> and a function f that takes a vector of indices, same length of n, and
> gives a scalar.
>
> I would like to fill the array
>
> a <- array(dim=n)
>
> so that (... is just notation, not R's ...)
>
> a[i,j,k,...] <- f(list(i,j,k,...))
>
> I would use loops, but since n can have different lengths, I don't
> know how many loops I would need beforehand. Is there a way to do
> this?
>
> Thanks,
>
> Tamas
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
tel 023-8059-7743
More information about the R-help
mailing list