R 为什么$&引用;“S4类自动完成工程”;“总结实验”;从生物导体

R 为什么$&引用;“S4类自动完成工程”;“总结实验”;从生物导体,r,autocomplete,bioconductor,s4,R,Autocomplete,Bioconductor,S4,我很难理解在BioConductor定制的S4课程“SummaredExperiment”中,自动完成是如何工作的 下面是一个来自示例(SummaredExperiment)的简短演示: 似乎有自己的通用$功能: 然而,当我在R控制台中按tab键时,它会自动完成$的可能名称: rse$<tab> rse$Treatment rse$ rse$治疗 为什么会这样?我认为R只会自动完成列表。选项卡完成的实现是通过S3通用?.DollarNames。对于总结实验,以下是 .Dollar

我很难理解在BioConductor定制的S4课程“SummaredExperiment”中,自动完成是如何工作的

下面是一个来自
示例(SummaredExperiment)
的简短演示:

似乎有自己的通用
$
功能:

然而,当我在R控制台中按tab键时,它会自动完成
$
的可能名称:

rse$<tab>
rse$Treatment
rse$
rse$治疗

为什么会这样?我认为R只会自动完成列表。

选项卡完成的实现是通过S3通用
?.DollarNames
。对于总结实验,以下是


.DollarNames.summaredExperiment不确定问题是什么。这可能不是您所看到的R功能。如果我的直觉是正确的,并且您使用的是RStudio,那么这里的标记实际上是合适的。@RomanLuštrik我没有使用R-studio。在问题中,我试图通过指定“当我在R控制台中按tab键时”来表示这一点。非常感谢。这对我来说是新的,非常有用。您是否知道在
@
插槽之后是否可以执行类似的自动完成操作?
@
访问交互式代码中的插槽将不被视为“良好做法”;这是访问类的内部实现,面向对象编程的一个主要租户是将实现与接口分离。但是是的,制表符完成在
x@
上工作,不需要开发人员使用任何方法。这将在
?.DollarNames
上讨论。我正在考虑编写一个S3类来重载@以访问一些属性,因此在这种情况下,为@定制自动完成功能将非常有用。但它似乎是为S4班预留的。
> 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
setMethod("$", "SummarizedExperiment",
    function(x, name)
{
    colData(x)[[name]]
})
rse$<tab>
rse$Treatment
.DollarNames.SummarizedExperiment <- function(x, pattern = "")
    grep(pattern, names(colData(x)), value=TRUE)