The assays slot in a SummarizedExperiment object supports elements with up to 4 dimensions [*]
library(SummarizedExperiment) makeSE <- function(n) { assay <- array(1:2^n, dim = rep(2, n), dimnames = split(letters[1:(2 * n)], seq_len(n))) SummarizedExperiment(assay) } x <- makeSE(4) However, the "higher-order" dimnames of the assays aren't preserved when calling the `assays` or `assay` getters: > dimnames(assay(x, withDimnames = TRUE)) [[1]] [1] "a" "e" [[2]] [1] "b" "f" [[3]] NULL [[4]] NULL This is despite the data still being available in the assays slot: > dimnames(x@assays[[1]]) 1` [1] "a" "e" 2` [1] "b" "f" 3` [1] "c" "g" 4` [1] "d" "h" The following patch fixes this by only touching the rownames and colnames and not touching the "higher-order" dimnames. Seem reasonable? Index: R/SummarizedExperiment-class.R =================================================================== --- R/SummarizedExperiment-class.R (revision 113505) +++ R/SummarizedExperiment-class.R (working copy) @@ -174,7 +174,10 @@ { assays <- as(x@assays, "SimpleList") if (withDimnames) - endoapply(assays, "dimnames<-", dimnames(x)) + endoapply(assays, function(assay) { + dimnames(assay)[1:2] <- dimnames(x) + assay + }) else assays }) [*] In fact, the assay elements can have more than 4 dimensions when constructed, although subsetting with `[` isn't supported (possibly things other than subsetting break as well in this case). # No error y <- makeSE(5) y # Error y[1, ] Perhaps there should be a check in the constructor that all assay elements have < 5 dimensions? Cheers, Pete _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel