R: что такое слоты?

79

Кто-нибудь знает, что такое слот в R?

Я не нашел объяснения его значения. Получаю рекурсивное определение: «Функция слота возвращает или устанавливает информацию об отдельных слотах объекта»

Помощь будет признательна, спасибо - Аллея

user573347
источник
Это из справки по slot()функции - она ​​не предназначена для документирования того, что такое слот, а только для того, как получить к ним доступ.
Гэвин Симпсон

Ответы:

87

Слоты связаны с объектами S4. Слот можно рассматривать как часть, элемент или «свойство» объекта. Допустим, у вас есть автомобильный объект, тогда у вас могут быть слоты «цена», «количество дверей», «тип двигателя», «пробег».

Внутри это представляет собой список. Пример :

setClass("Car",representation=representation(
   price = "numeric",
   numberDoors="numeric",
   typeEngine="character",
   mileage="numeric"
))
aCar <- new("Car",price=20000,numberDoors=4,typeEngine="V6",mileage=143)

> aCar
An object of class "Car"
Slot "price":
[1] 20000

Slot "numberDoors":
[1] 4

Slot "typeEngine":
[1] "V6"

Slot "mileage":
[1] 143

Здесь цена, количество дверей, тип двигателя и пробег - это слоты S4 класса «Автомобиль». Это банальный пример, на самом деле сами слоты могут быть снова сложными объектами.

Доступ к слотам можно получить разными способами:

> aCar@price
[1] 20000
> slot(aCar,"typeEngine")
[1] "V6"    

или путем создания определенного метода (см. дополнительную документацию).

Подробнее о программировании S4 см. В этом вопросе . Если концепция все еще кажется вам расплывчатой, может помочь общее введение в объектно-ориентированное программирование.

PS: Обратите внимание на разницу с фреймами данных и списками, которые вы используете $для доступа к именованным переменным / элементам.

Джорис Мейс
источник
3
+1 хороший ответ, Джорис. Возможно, вы захотите добавить пример такого slot(aCar, "price")же другого использования, особенно когда операционист рассматривал slot()функцию
Гэвин Симпсон
Спасибо, ваш ответ был очень полезным !!
user573347
9
А чтобы получить все слоты класса, есть getSlots()или slotNames()их названия.
Laurent
18

Так же, как names(variable)перечисляются все $доступные имена сложной переменной, так и

slotNames(object) перечисляет все слоты объекта.

Очень удобно, чтобы узнать, какие вкусности есть в вашем объекте для вашего удовольствия от просмотра.

Тим
источник
10

В дополнение к ресурсам, на которые указывает @Joris, а также к его собственному ответу, попробуйте прочитать ?Classes, который включает следующее о слотах:

 Slots:

      The data contained in an object from an S4 class is defined
      by the _slots_ in the class definition.

      Each slot in an object is a component of the object; like
      components (that is, elements) of a list, these may be
      extracted and set, using the function ‘slot()’ or more often
      the operator ‘"@"’.  However, they differ from list
      components in important ways.  First, slots can only be
      referred to by name, not by position, and there is no partial
      matching of names as with list elements.
      ....
Гэвин Симпсон
источник
1

Понятия не имею, почему R должен все переопределять. Большинство нормальных языков программирования называют их «свойствами» или «атрибутами».

Максимум
источник
Это законный комментарий. Допустим, R полон необычных вариантов дизайна.
King Crimson
Я могу понять странную терминологию для функций, относящихся к 70-м годам, но слотов среди них нет, они были добавлены на самом деле, когда большинство объектно-ориентированных языков отставали от них на десятки лет.
Макс