R: Was sind Slots?

79

Weiß jemand, was ein Slot in R ist?

Ich habe die Erklärung seiner Bedeutung nicht gefunden. Ich erhalte eine rekursive Definition: "Die Slot-Funktion gibt Informationen zu den einzelnen Slots eines Objekts zurück oder legt diese fest."

Hilfe wäre dankbar, Danke - Alley

user573347
quelle
Das geht aus der Hilfe zur slot()Funktion hervor - sie soll nicht dokumentieren, was ein Steckplatz ist, sondern nur, wie man darauf zugreift.
Gavin Simpson

Antworten:

87

Slots sind mit S4-Objekten verknüpft. Ein Slot kann als Teil, Element oder "Eigenschaft" eines Objekts angesehen werden. Angenommen, Sie haben ein Autoobjekt, dann können Sie die Steckplätze "Preis", "Anzahl der Türen", "Motortyp", "Kilometerstand" haben.

Intern ist das eine Liste dargestellt. Ein Beispiel :

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

Hier sind Preis, Anzahl Türen, Typ Motor und Kilometerstand Slots der S4-Klasse "Auto". Dies ist ein triviales Beispiel, in Wirklichkeit können Slots selbst wieder komplexe Objekte sein.

Auf Slots kann auf verschiedene Arten zugegriffen werden:

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

oder durch die Konstruktion einer bestimmten Methode (siehe zusätzliche Dokumentation).

Weitere Informationen zur S4-Programmierung finden Sie in dieser Frage . Wenn das Konzept für Sie immer noch vage klingt, kann eine allgemeine Einführung in die objektorientierte Programmierung hilfreich sein.

PS: Beachten Sie den Unterschied zu Datenrahmen und Listen, mit denen Sie $auf benannte Variablen / Elemente zugreifen.

Joris Meys
quelle
3
+1 nette Antwort Joris. Vielleicht möchten Sie ein Beispiel für slot(aCar, "price")eine andere Verwendung hinzufügen , zumal die Operation die slot()Funktion betrachtete
Gavin Simpson
Danke, deine Antwort war sehr hilfreich !!
user573347
9
Und um alle Slots einer Klasse zu bekommen, gibt es getSlots()oder slotNames()für deren Namen.
Laurent
18

So wie names(variable)alle $zugänglichen Namen einer komplexen Variablen aufgelistet sind, so auch

slotNames(object) listet alle Slots eines Objekts auf.

Sehr praktisch, um herauszufinden, welche Extras Ihr Fit-Objekt für Ihr Sehvergnügen enthält.

tim
quelle
10

Versuchen Sie zusätzlich zu den Ressourcen, auf die @Joris Sie verweist, und seiner eigenen Antwort, zu lesen ?Classes, einschließlich der folgenden Informationen zu Slots:

 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
quelle
1

Keine Ahnung, warum R alles neu definieren muss. Die meisten normalen Programmiersprachen nennen sie "Eigenschaften" oder "Attribute".

Max
quelle
Dies ist ein legitimer Kommentar. Lassen Sie uns zugeben, dass R voller skurriler Designoptionen ist.
King Crimson
Ich kann seltsame Begriffe für Funktionen aus den 70er Jahren verstehen, aber Slots gehören nicht dazu, sie wurden tatsächlich hinzugefügt, als die meisten OO-Sprachen zehn Jahre hinter sich hatten.
Max