1

4次元配列で最大値が1の行の割合を取得したいと考えています。4 次元の個々の値に対して apply 関数を使用してその情報を取得し、cbind を使用してすべての出力を組み合わせることができます。ただし、4 次元の値の数は異なる場合があります。cbind を使用せずに目的の形式で出力を取得する効率的な方法はありますか?

以下は、必要な情報を配列の 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 で cbind を使用せずに pp に相当するものを取得する簡単な方法はありますか (おそらく apply および colMeans 関数を組み込んだワンライナー)? 4 次元 (D) の値の数が変化すると、cbind と組み合わせる必要があるベクトルの数が変化します。

ご提案ありがとうございます。

4

1 に答える 1

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
于 2012-04-24T23:40:31.043 に答える