Arrays 如何使apply()不删除维度?

Arrays 如何使apply()不删除维度?,arrays,r,Arrays,R,我有一个4维数组,我想在不改变轴的情况下对其应用函数: l = letters a = array(1:2*3*4*5, dim=c(2,3,4,5),dimnames=list(l[1:2],l[3:5],l[6:9],l[10:14])) id = function(x) x fx = function(x) sum(x) 如果我应用的函数不改变结构,我可以使用aperm恢复原始尺寸: re = dim(apply(a, c(1,2,4), id)) # 4 2 3 5 aperm(re,

我有一个4维数组,我想在不改变轴的情况下对其应用函数:

l = letters
a = array(1:2*3*4*5, dim=c(2,3,4,5),dimnames=list(l[1:2],l[3:5],l[6:9],l[10:14]))
id = function(x) x
fx = function(x) sum(x)
如果我应用的函数不改变结构,我可以使用
aperm
恢复原始尺寸:

re = dim(apply(a, c(1,2,4), id)) # 4 2 3 5
aperm(re, match(seq_along(dim(a)), c(3,1,2,4))) # original dims
是否有任何方法可以在保留尺寸的特定尺寸上应用函数

re = dim(apply(a, c(1,2,4), fx)) # 2 3 5, dropping 3rd dimension

其他函数有一个参数
drop
,用于指示长度为
1
的维度是否应该被删除,但实际上没有。在您的问题中,您没有定义
l
。您在
plyr
中见过
aaply
函数吗?它提供(除其他外)
.drop
:*如果在输出中删除长度为1的额外维度。