Автозаполнение на основе слота внутри объекта S4 - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь заставить автозаполнение столбца RStudio работать с пользовательским классом S4. Класс имеет слоты data (a data.frame) и version (character), а также метод $, который обращается к данным 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$mpg осуществляет доступ к db@data$mpg, как я и ожидал, но использование db$ не вызывает никаких параметров автозаполнения в RStudio.

Мой подход смоделирован после пакета sp, для которого я вижу опции автозаполнения для слота data в SpatialPointsDataFrame, например,

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

Есть ли какой-то конкретный метод или стратегия, которую я могу использовать для включения автозаполнения?

1 Ответ

0 голосов
/ 14 ноября 2018

Разобрался, клонировав библиотеку sp и систематически удаляя вещи, пока автозаполнение не переставало работать. Для автозаполнения RStudio требуется метод names, который экспортируется в пакет NAMESPACE, например

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

# in NAMESPACE
S3method(names,MyDb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...