On 16/12/2021 23:00, Dario Strbenac via Bioc-devel wrote:
Hello, Ah, yes, the sample names should of course be in the rows - Friday afternoon error. In the question, I specified "largely the same set of features", implying that the overlap is not complete. So, the example below will error. DFL <- DataFrameList(X = DataFrame(a = 1:3, b = 3:1, row.names = LETTERS[1:3]), Y = DataFrame(b = 4:6, c = 6:4, row.names = LETTERS[20:22])) unlist(DFL) Error in .aggregate_and_align_all_colnames(all_colnames, strict.colnames = strict.colnames) : the DFrame objects to combine must have the same column names
unlist() uses rbind() internally to combine the rows and rbind() wants to see the same columns in all the DataFrame to combines. combineRows() is a more flexible version of rbind() that was added in BioC 3.13: do.call(combineRows, unname(as.list(DFL))) # DataFrame with 6 rows and 3 columns # a b c # <integer> <integer> <integer> # A 1 3 NA # B 2 2 NA # C 3 1 NA # T NA 4 6 # U NA 5 5 # V NA 6 4 If you want to discuss this further, please ask on the support site. H.
This is long but works: allFeatures <- unique(unlist(lapply(DFL, colnames))) DFL <- lapply(DFL, function(DF) { missingFeatures <- setdiff(allFeatures, colnames(DF)) DF[missingFeatures] <- NA DF }) DFLflattened <- do.call(rbind, DFL) Is there a one-line function for it? -------------------------------------- Dario Strbenac University of Sydney Camperdown NSW 2050 Australia _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
-- Hervé Pagès Bioconductor Core Team hpages.on.git...@gmail.com _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel