2

二次元バイナリ配列で三次元配列のサブセットを選択することは可能ですか? 値を選択にプッシュできるように、これを実行できるようにしたいと思います

たとえば、配列 dim(a) = (lat, long, time) があり、TRUE/FALSE 値でいっぱいの配列である dim(b) = (lat, long) で選択したいと考えています。私は次のようなことができるようにしたい:

> a <- array(c(1,2,3,4,5,6,7,8),c(2,2,2))
> b <- matrix(c(0,1,0,0), c(2,2))==TRUE
> a[[b]] <- 0
> a
, , 1
     [,1] [,2]
[1,]    1    3
[2,]    0    4

, , 2
     [,1] [,2]
[1,]    5    7
[2,]    0    8

編集a[b] <- 0:わかりました。これはばかげた質問のように見えます。(単一の括弧)を使用すると、上記とまったく同じように機能することに気づきました。ただし、それは、スパンしたいディメンションが最後のディメンションである場合にのみ機能します。だから、もっと面白くするために:

スパンしたい次元が最初または2番目の次元である場合、どうすればこれを行うことができますか? もしdim(b)==(緯度、年)?

4

1 に答える 1

5

R は、演算子を使用した配列の行列サブセット化をサポートしてい[ます (つまり、二重括弧ではなく単一の括弧 - 二重括弧は常に単一の要素のみを返します):

a[b] <- 0
a

, , 1

     [,1] [,2]
[1,]    1    3
[2,]    0    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    0    8

これは、質問で指定した結果とは多少異なることに注意してください。あなたの質問では、2 番目の要素 (行列の左下の要素) は 1 であるため、各配列スライスの 2 番目の要素が変更されることが予想されます。(つまり、あなたの例のように、最初ではありません。)

于 2012-06-14T03:44:46.670 に答える