2011/11/1 Ernest Adrogué <nfdi...@gmail.com>: > Hi, > > On ocasion, you need to subscript an array that has an arbitrary > (ie. not known in advance) number of dimensions. How do you deal with > these situations? > It appears that it is not possible use a list as an index, for > instance this fails: > >> x <- array(NA, c(2,2,2)) >> x[list(TRUE,TRUE,2)] > Error in x[list(TRUE, TRUE, 2)] : invalid subscript type 'list' > > The only way I know is using do.call() but it's rather ugly. There > must be a better way!! > >> do.call('[', c(list(x), TRUE, TRUE, 2)) > [,1] [,2] > [1,] NA NA > [2,] NA NA > > Any idea?
> library("R.utils") > x <- array(1:8, dim=c(2,2,2)) > x , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,] 6 8 > extract(x, "3"=2) , , 1 [,1] [,2] [1,] 5 7 [2,] 6 8 For more details/examples, see help("extract.array", package="R.utils"). It doesn't to assignments, but could be achieved by: idxs <- array(seq(along=x), dim=dim(x)) idxs <- extract(idxs, "3"=2) x[idxs] <- ... base::arrayInd() may also be useful. /Henrik > > Regards, > Ernest > > ______________________________________________ > 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. > ______________________________________________ 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.