首页 > 解决方案 > 基于 S4 对象内的插槽自动完成

问题描述

我正在尝试让 RStudio 列自动完成以使用自定义 S4 类。该类具有插槽data(a data.frame)和versioncharacter),以及$访问数据的方法slot,例如

setClass("MyDb", representation(data = "data.frame", version = "character"))

setMethod("$", signature = "MyDb", 
          function(x, name) { return(x@data[[name]]) }
)

db <- new("MyDb", data = mtcars, version = "2.3.1")

正如我所料,使用db$mpgaccesses db@data$mpg,但 usingdb$不会在 RStudio 中显示任何自动完成选项。

我的方法是以sp包为模型的,为此我确实看到了 a 中data插槽的自动完成选项SpatialPointsDataFrame,例如

library(sp)  
data("meuse")
coordinates(meuse) <- ~ x + y
meuse$  # brings up autocomplete options for meuse@data slot

我可以使用特定的方法或策略来启用自动完成功能吗?

标签: rstudio

解决方案


通过克隆sp库并系统地删除内容直到自动完成停止工作来解决这个问题。RStudio 自动完成似乎需要一个names在包中导出的方法NAMESPACE,例如

# in MyDb.R
names.MyDb <- function(x) names(x@data)

# in NAMESPACE
S3method(names,MyDb)

推荐阅读