R: що таке слоти?


79

Хтось знає, що таке слот у R?

Я не знайшов пояснення його значення. Я отримую рекурсивне визначення: "Функція слота повертає або встановлює інформацію про окремі слоти об'єктів"

Допомога буде вдячна, Дякую - Алея


Тобто з довідки щодо slot()функції - вона не призначена для документування того, що таке слот, а лише про те, як отримати до них доступ.
Gavin Simpson

Відповіді:


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()для їх імен.
Лоран,

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-ми роками, але слоти серед них не є, їх додали насправді, коли більшість мов OO мали десятки років позаду.
Макс.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.