gpt4 book ai didi

r - 为什么 "$"自动补全适用于 BioConductor 的 S4 类 "SummarizedExperiment"

转载 作者:行者123 更新时间:2023-12-01 12:10:33 27 4
gpt4 key购买 nike

我很难理解自动完成如何适用于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com