Skip to content

[Bioc-devel] mcols<-() behaviour inheriting from Vector vs GRanges

1 message · Malcolm Perry

#
Hello,

A recent question on the support site (
https://support.bioconductor.org/p/76430/#76460) shows that the mcols
assignment in GRanges (and perhaps others) is subtly different from classes
that purely inherit from Vector (such as GenomicInteractions in the
example), as the GRanges method will implicitly convert a data.frame object
to a "DataFrame".

Is it possible for Vector to have the same behaviour? From the users'
perspective it looks like a bug in the downstream package, and I guess many
people will not spot the obvious fix.

Thanks,

Malcolm

PS Here is a self-contained example just using the core packages and no
external data:

library(S4Vectors)

setClass("CharacterVector",
    representation(char_data = "character"),
    contains="Vector"
)

setMethod(length, "CharacterVector", function(x) length(x at char_data))

char = new("CharacterVector", char_data=c("one", "two", "three"))

mcols(char) = data.frame(number=1:3) # will fail

mcols(char) = DataFrame(number=1:3) # fine

library(GenomicRanges)

gr = GRanges("chr", IRanges(1, 5))

mcols(gr) = data.frame(name="range1")