R:组合输出以应用数组维度的每个值

时间:2012-04-24 23:19:09

标签: r

我希望在4维数组中获得最大值为1的行的百分比。我可以使用针对第4维的单个值的应用函数来获取该信息,然后使用cbind来组合所有输出。但是,第四维中的值的数量可以变化。有没有一种有效的方法来获得所需格式的输出而不使用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(可能是包含apply和colMeans功能的单线程)上使用cbind获得相当于pp的值?如果第四维(D)中的值的数量发生变化,则必须与cbind组合的向量数量会有所不同。

感谢您提出任何建议。

1 个答案:

答案 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