2012-04-24 3 views
1

4次元配列で最大値1の行の割合を取得したいと考えています。 4次元の個々の値に対して適用関数を使用してその情報を取得し、次にcbindを使用してすべての出力を結合することができます。ただし、4次元の値の数は変わることがあります。 cbindを使わずに目的のフォーマットで出力を得る効率的な方法はありますか?R:配列ディメンションの各値に対してapplyの出力を結合する

以下は、配列の4次元の各レベルごとに別々のベクトルとして目的の情報を返す機能コードです。

set.seed(9345) 

A <- 8 
B <- 2 
C <- 5 
D <- 2 # the value of D might change 

y2 <- array(rbinom(A*B*C*D, 1, 0.4), dim = c(A, B, C, D)) 

pA <- colMeans(apply(y2[,,,1], c(1,3), max)) 
pB <- colMeans(apply(y2[,,,2], c(1,3), max)) 

pp <- cbind(pA, pB) 
pp 

#  pA pB 
# [1,] 0.750 0.875 
# [2,] 0.625 0.250 
# [3,] 0.375 1.000 
# [4,] 0.375 0.500 
# [5,] 0.625 0.750 

出力のpA及びPb(適用とcolMeans機能を組み込んだ多分ワンライナー)でCBIND使用せずにPPと同等のものを得るための簡単な方法はありますか? 4次元(D)の値の数が変化すると、cbindと組み合わせなければならないベクトルの数が変化します。

ありがとうございます。

+0

あなたが投稿したコードを編集せずに動作しません。 (あなたはオブジェクト 'y'を設定しますが、' y2'を操作します。) 'y2 < - y'を実行すると、結果の行列は表示されていません。 (代わりに私の答えにあるものと一致します)。 –

+0

はい、私はそれを見て固定しました。申し訳ありません。 –

答えて

4

これは同等、およびブートに単純でなければなりません:

colMeans(apply(y2[,,,], c(1,3,4), max)) 
#  [,1] [,2] 
# [1,] 0.750 0.875 
# [2,] 0.625 0.250 
# [3,] 0.375 1.000 
# [4,] 0.375 0.500 
# [5,] 0.625 0.750 
+0

答えをありがとう。私はt():colMeans(apply(y2 [,,,]、c(1,3,4)、max))を必要としない、c(1,3,4)を使うと思っています。 –

+0

@ MarkMiller - これをキャッチしてくれてありがとう(今は固定)。 (なぜ、 'c(1,3,4)'が投稿された結果と一致しなかったのか疑問に思っていたときに実行していた実験から残されていました) –

関連する問題