1

我希望获得 4 维数组中最大值为 1 的行的百分比。我可以使用第 4 维的单个值的应用函数来获取该信息,然后使用 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

有没有一种简单的方法来获得 pp 的等价物,而无需在输出 pA 和 pB 上使用 cbind (可能是一个包含 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 回答