2016-08-08 16 views
3

私は3D配列を扱っています。関数は、行と列の名前(配列の対応する淡色の名前)を使用して、ユーザーから2D配列のスライス(行列)を取り出し、可視化します。Rで行列として1x1の配列スライスを抽出する方法は?

a <- array(1, c(1,1,1), list(A="a", B="b", C="c")) 

a[1,,] 
[1] 1 

それ故に、一部のないdimnamesとスカラーである:配列の次元は、私は1x1x1の配列を持っている場合しかし、私はマトリックスとしてスライスを抽出することができない> 1

いる場合は正常に動作し必要な情報が欠落しています。私はdrop=FALSEを追加する場合、私は行列を取得するが、元の配列を保持しません。

a[1,,,drop=FALSE] 
, , C = c 

    B 
A b 
    a 1 

dimnamesはここにあるが、それでも3次元です。ちょうど三次元ずに、上記のようになります1x1x1配列から行列スライスを取得する簡単な方法はあります:

B 
A b 
    a 1 

私は問題は、配列のインデックスを作成する際に、我々は「取る区別できないということである疑いがあります1つの値」と 『すべてはただシングルトンである』場合に「すべての値を取る...

答えて

6

[dropパラメータは、オールオアナッシングではありませんが、abindパッケージはあなたをできるようになるadrop機能を持っていますドロップするディメンションを選択します。

abind::adrop(a, drop = 3) 
## B 
## A b 
## a 1 
任意の追加パッケージなし
+0

おっと、これをdownvoted?それは良い答えです! – thelatemail

+0

これはまさに私が探していたものです:-) –

+0

@thelatemailそれは最後の二日間私のために3番目の奇妙なものです。私は、誰かがシリアルdownvoteスクリプトを気づかせないようにしていると思います。理由は考えられません。私はほとんど一週間離れていました。 – alistaire

4

は、私が行うことができる最高はapplyにしたサブ配列を返す:

apply(a, 1:2, identity) 
# or 
apply(a, 1:2, I) 

# B 
#A b 
# a 1 
関連する問題