thank you Simon.
I find a[M] working to be unexpected, but consistent with (a close
reading of) Extract.Rd
Can we reproduce a[,M]?
[I would expect this to extract a[,j,k] where M[j,k] is TRUE]
try this:
a <- array(1:30,c(3,5,2))
M <- matrix(1:10,5,2) %% 3==1
a[M]
[1] 1 4 7 10 11 14 17 20 21 24 27 30
This is not doing what I would want a[,M] to do.
I'll checkout afill() right now....
best wishes
Robin
On Wed, Sep 28, 2011 at 10:39 AM, Simon Knapp <sleepingwell at gmail.com>
wrote:
a[M] gives the same as your `cobbled together' code.
On Wed, Sep 28, 2011 at 6:35 AM, robin hankin <hankin.robin at 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.robin at gmail.com