我希望在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组合的向量数量会有所不同。
感谢您提出任何建议。
答案 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