a[M] gives the same as your `cobbled together' code. On Wed, Sep 28, 2011 at 6:35 AM, robin hankin <hankin.ro...@gmail.com>wrote:
> hello everyone. > > Look at the following R idiom: > > a <- array(1:30,c(3,5,2)) > M <- (matrix(1:15,c(3,5)) %% 4) < 2 > a[M,] <- 0 > > Now, I think that "a[M,]" has an unambiguous meaning (to a human). > However, the last line doesn't work as desired, but I expected it > to...and it recently took me an indecent amount of time to debug an > analogous case. Just to be explicit, I would expect a[M,] to extract > a[i,j,] where M[i,j] is TRUE. (Extract.Rd is perfectly clear here, and R > is > behaving as documented). > > The best I could cobble together was the following: > > ind <- which(M,arr.ind=TRUE) > n <- 3 > ind <- > cbind(kronecker(ind,rep(1,dim(a)[n])),rep(seq_len(dim(a)[n]),nrow(ind))) > a[ind] <- 0 > > > but the intent is hardly clear, certainly compared to "a[M,]" > > I've been pondering how to implement such indexing, and its > generalization. > > Suppose 'a' is a seven-dimensional array, and M1 a matrix and M2 a > three-dimensional array (both Boolean). Then "a[,M1,,M2]" is a > natural generalization of the above. I would want a[,M1,,M2] to > extract a[i1,i2,i3,i4,i5,i6,i7] where M1[i2,i3] and M[i5,i6,i7] are > TRUE. > > One would need all(dim(a)[2:3] == dim(M1)) and all(dim(a)[5:7] == > dim(M2)) for consistency. > > Can any R-devel subscribers advise? > > > > > -- > Robin Hankin > Uncertainty Analyst > hankin.ro...@gmail.com > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel