From hankin.robin at gmail.com  Wed Sep 28 00:12:26 2011
From: hankin.robin at gmail.com (robin hankin)
Date: Wed, 28 Sep 2011 11:12:26 +1300
Subject: [Rd] array extraction
In-Reply-To: <CAA+5f=2ib1zJpg-BC9KwzD3zGkyKBcYybVP5RwioJSR48w50+A@mail.gmail.com>
References: <CAHHjBM5eG0tc_D-XpFTroRT+Yv1yHYdL+RgDh+xkH3WpT8MW5w@mail.gmail.com>
	<CAA+5f=2ib1zJpg-BC9KwzD3zGkyKBcYybVP5RwioJSR48w50+A@mail.gmail.com>
Message-ID: <CAHHjBM633nEhJ9eFA4asach6qQkwHnR6OuqcVYvhkscZOq5Raw@mail.gmail.com>

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
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



-- 
Robin Hankin
Uncertainty Analyst
hankin.robin at gmail.com



[Rd] array extraction
robin hankin