Мне трудно понять, как может работать автозаполнение для пользовательского класса S4 в BioConductor, который называется SummarizedExperiment.
Вот короткая демонстрация, взятая из example(SummarizedExperiment)
:
library(SummarizedExperiment)
nrows <- 200; ncols <- 6
counts <- matrix(runif(nrows * ncols, 1, 1e4), nrows)
rowRanges <- GRanges(rep(c("chr1", "chr2"), c(50, 150)),
IRanges(floor(runif(200, 1e5, 1e6)), width=100),
strand=sample(c("+", "-"), 200, TRUE),
feature_id=sprintf("ID%03d", 1:200))
colData <- DataFrame(Treatment=rep(c("ChIP", "Input"), 3), row.names=LETTERS[1:6])
rse <- SummarizedExperiment(assays=SimpleList(counts=counts),
rowRanges=rowRanges, colData=colData)
Теперь этот объект:
> structure(rse)
class: RangedSummarizedExperiment
dim: 200 6
metadata(0):
assays(1): counts
rownames: NULL
rowData names(1): feature_id
colnames(6): A B ... E F
colData names(1): Treatment
Кажется, у него есть собственная общая $
функция LINK :
setMethod("$", "SummarizedExperiment",
function(x, name)
{
colData(x)[[name]]
})
Тем не менее, когда я нажимаю tab в консоли R, он автоматически заполняет возможные имена для $
:
rse$<tab>
rse$Treatment
Почему это происходит? Я думал, что R только автозаполнение $
для списков.