从aaply结果中删除轴标题

时间:2014-03-10 18:30:10

标签: arrays r header

我使用aaplyplyr包)来提供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>

1 个答案:

答案 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