13

配列をサブセット化する場合、Rは、次元の1つが長さ1であるかどうかによって、動作が異なります。ディメンションの長さが1の場合、そのディメンションはサブセット化中に失われます。

ax <- array(1:24, c(2,3,4))
ay <- array(1:12, c(1,3,4))
dim(ax)
#[1] 2 3 4
dim(ay)
#[1] 1 3 4
dim(ax[,1:2,])
#[1] 2 2 4
dim(ay[,1:2,])
#[1] 2 4

私の見解では、axとayは同じであり、それらに対して同じサブセット操作を実行すると、同じ次元の配列が返されるはずです。Rが2つのケースを処理する方法は役立つかもしれませんが、私が書いているコードでは望ましくありません。つまり、サブセット化された配列を別の関数に渡すと、前の段階で次元を長さ1に減らした場合、その関数は次元が欠落している配列を取得します。(したがって、この場合、Rの柔軟性により、コードの柔軟性が低下します!)

サブセット化中にRが長さ1の次元を失うのを防ぐにはどうすればよいですか?インデックスを作成する別の方法はありますか?設定するフラグはありますか?

4

1 に答える 1

21

あなたがデフォルトで知っているように、Rは不必要な次元を落とします。drop=FALSEインデックス作成中に追加すると、これを防ぐことができます。

> dim(ay[,1:2,])
[1] 2 4
> dim(ax[,1:2,])
[1] 2 2 4
> dim(ay[,1:2,,drop = F])
[1] 1 2 4
于 2012-10-05T23:52:07.370 に答える