R: co to są automaty?

79

Czy ktoś wie, co to jest automat w R?

Nie znalazłem wyjaśnienia jego znaczenia. Otrzymuję definicję rekurencyjną: „Funkcja Slot zwraca lub ustawia informacje o poszczególnych gniazdach obiektów”

Pomoc byłaby doceniona, Dzięki - Alley

user573347
źródło
Wynika to z pomocy dotyczącej slot()funkcji - nie ma ona dokumentować, czym jest gniazdo, tylko jak uzyskać do nich dostęp.
Gavin Simpson,

Odpowiedzi:

87

Gniazda są połączone z obiektami S4. Szczelina może być postrzegana jako część, element lub „właściwość” obiektu. Powiedzmy, że masz samochód, wtedy możesz mieć sloty „cena”, „liczba drzwi”, „typ silnika”, „przebieg”.

Wewnętrznie jest to lista. Przykład :

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

Tutaj cena, liczbaDrzwi, typSilnik i przebieg to gniazda klasy S4 „Samochód”. To trywialny przykład, w rzeczywistości same gniazda mogą być ponownie złożonymi obiektami.

Do automatów można uzyskać dostęp na wiele sposobów:

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

lub poprzez budowę określonej metody (patrz dodatkowa dokumentacja).

Więcej informacji na temat programowania S4 można znaleźć w tym pytaniu . Jeśli ta koncepcja nadal brzmi dla ciebie niejasno, pomocne może być ogólne wprowadzenie do programowania obiektowego.

PS: Zwróć uwagę na różnicę w ramkach danych i listach, w których $uzyskujesz dostęp do nazwanych zmiennych / elementów.

Joris Meys
źródło
3
+1 miła odpowiedź Joris. Może chcesz dodać przykład slot(aCar, "price")tak jak innego wykorzystania, esp jako op patrzył na slot()funkcję
Gavin Simpson
Dzięki, Twoja odpowiedź była bardzo pomocna!
user573347
9
Aby zdobyć wszystkie miejsca w klasie, istnieje getSlots()lub slotNames()dla ich nazw.
Laurent,
18

Podobnie jak names(variable)wyświetla listę wszystkich dostępnych $nazw zmiennej złożonej

slotNames(object) wyświetla wszystkie szczeliny obiektu.

Bardzo przydatne, aby dowiedzieć się, jakie gadżety zawiera Twój fit-obiekt, abyś mógł oglądać ją.

tim
źródło
10

Oprócz zasobów, na które wskazuje @Joris, a także jego własnej odpowiedzi, spróbuj przeczytać ?Classes, który zawiera następujące informacje na temat slotów:

 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.
      ....
Gavin Simpson
źródło
1

Nie mam pojęcia, dlaczego R musi wszystko przedefiniować. Większość normalnych języków programowania nazywa je „właściwościami” lub „atrybutami”.

Maks
źródło
To jest uzasadniony komentarz. Przyznajmy, że R jest pełen dziwacznych wyborów projektowych.
King Crimson
Rozumiem dziwną terminologię dotyczącą funkcji z lat 70., ale automatów do gier nie ma wśród nich, zostały dodane, gdy większość języków OO miała za sobą dziesiątki lat.
Max