我很难理解自动完成如何适用于 BioConductor 中名为“SummarizedExperiment”的定制 S4 类。
这是取自 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]]
})
然而,当我在 R 控制台中按 Tab 键时,它会自动完成
$
的可能名称:rse$<tab>
rse$Treatment
为什么会这样?我认为 R 只会自动完成列表的
$
。 最佳答案
Tab 补全的实现是通过 S3 通用 ?.DollarNames
实现的。对于 SummarizedExperiment,relevant method 是
.DollarNames.SummarizedExperiment <- function(x, pattern = "")
grep(pattern, names(colData(x)), value=TRUE)
大约,当按下 tab 键时,R 查找模式
x$foo<tab>
,发现 x
是 SummarizedExperiment,因此查找 .DollarNames.SummarizedExperiment
进行评估,将 x
作为第一个参数传递,将 foo
作为第二个参数传递,提供方法返回的完成。相反,当按下回车
x$foo<cr>
时,R 会发现您正在尝试在 $
上调用 x
,因此会查找 $
的 (S4) 方法。关于r - 为什么 "$"自动完成功能适用于 BioConductor 的 S4 类 "SummarizedExperiment",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52000053/