我使用aaply
(plyr
包)来提供n空间数组的简单摘要统计信息。源数组具有轴标题,但不具有行/列名称。一个简化的例子:
mtx <- array(1:24, dim=c(3,4,2))
dimnames(mtx) <- list(A=NULL, B=NULL, C=NULL)
mtx
## , , 1
##
## B
## A [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## B
## A [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
请注意,我有轴名但没有行/列名。当我想沿轴汇总时,会添加标题名称:
(mtx2 <- aaply(mtx, c(3,2), sum))
## B
## C 1 2 3 4
## 1 6 15 24 33
## 2 42 51 60 69
请注意,我们现在有&#39; 1&#39;,&#39; 2&#39;等的行/列名称(字符串)。我可以手动删除它们:
dimnames(mtx2) <- list(C=NULL, B=NULL)
或更具体地说:
dimnames(mtx2) <- structure(replicate(length(dim(mtx2)), NULL), .Names=names(dimnames(mtx2)))
但我希望首先不要包含行/列标题。
是否有一个选项(我很少)缺少(aaply)这样做?
(顺便说一句:我知道它主要是装饰性的,而且我仍然可以使用整数索引来引用所有行/列/等。我的观点主要是美学,但专注于从函数调用提供一致的输出。)
修改:我使用aaply()
提供的apply()
没有的其他选项,所以我希望与函数调用保持一致。< / p>
答案 0 :(得分:0)
所以,为了清楚起见,您在aaply(...)
包中使用了plyr
,并且它正在添加行名和列名:
library(plyr)
mtx2 <- aaply(mtx, c(3,2), sum)
str(mtx2)
# int [1:2, 1:4] 6 42 15 51 24 60 33 69
# - attr(*, "dimnames")=List of 2
# ..$ C: chr [1:2] "1" "2"
# ..$ B: chr [1:4] "1" "2" "3" "4"
您可以使用apply(...)
在基本R中获得相同的结果,而无需获取列名或行名:
mtx3 <- apply(mtx, c(3,2), sum)
all(mtx2 == mtx3)
# [1] TRUE
str(mtx3)
# int [1:2, 1:4] 6 42 15 51 24 60 33 69
# - attr(*, "dimnames")=List of 2
# ..$ C: NULL
# ..$ B: NULL