我有一个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
,用于指示是否应删除带length=1
的维度,但事实并非如此。