为什么“$”自动完成适用于 BioConductor 的 S4 class "SummarizedExperiment"
Why "$" autocompletion works for S4 class "SummarizedExperiment" from BioConductor
我很难理解自动完成功能如何适用于 BioConductor 中名为 "SummarizedExperiment" 的定制 S4 class。
这是从 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
作为第二个参数,提供由方法完成的 return。
相比之下,当按下 return 回车 x$foo<cr>
时,R 发现您正试图在 x
上调用 $
,因此查找 ( S4) $
.
的方法
我很难理解自动完成功能如何适用于 BioConductor 中名为 "SummarizedExperiment" 的定制 S4 class。
这是从 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
作为第二个参数,提供由方法完成的 return。
相比之下,当按下 return 回车 x$foo<cr>
时,R 发现您正试图在 x
上调用 $
,因此查找 ( S4) $
.