R: what are Slots?
Asked Answered
L

4

88

Does anyone know what a slot is in R?

I did not find the explanation of its meaning. I get a recursive definition: "Slot function returns or set information about the individual slots of an object"

Lama answered 17/1, 2011 at 13:58 Comment(1)
That is from the help on the slot() function - it isn't meant to document what a slot is, just how to access them.Gaelic
A
103

Slots are linked to S4 objects. A slot can be seen as a part, element or a "property" of an object. Say you have a car object, then you can have the slots "price", "number of doors", "type of engine", "mileage".

Internally, that is represented a list. An example :

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

Here, price, numberDoors, typeEngine and mileage are slots of the S4 class "Car". This is a trivial example, in reality slots themselves can be again complex objects.

Slots can be accessed in numerous ways :

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

or through the construction of a specific method (see extra documentation).

For more on S4 programming see this question. If the concept still sounds vague to you, a general introduction in Object Oriented Programming could help.

PS: Mind the difference with dataframes and lists, where you use $ to access named variables/elements.

Autism answered 17/1, 2011 at 14:9 Comment(4)
+1 nice answer Joris. You might want to add an example of slot(aCar, "price") just as another usage, esp as the op was looking at the slot() functionGaelic
And to get all the slots of a class, there is getSlots(), or slotNames() for their names.Fecal
So, I wonder how is this different from what we call "attributions" or "properties" in other programming languages?Goulden
Is there an equivalent for $ and [[]]? So element(aCar, "typeEngine") instead of aCar$typeEngine ?Prat
L
25

Just as names(variable) lists up all the $-accessible names of a complex variable, so too

slotNames(object) lists all the slots of an object.

Very handy to discover what goodies your fit-object contains for your viewing pleasure.

Longinus answered 21/9, 2011 at 17:57 Comment(0)
G
14

In addition to the resources @Joris points you to, plus his own answer, try reading ?Classes, which includes the following on 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.
      ....
Gaelic answered 17/1, 2011 at 14:42 Comment(1)
That part about non-positionality seems especially helpful when comparing to something like a named list.Maishamaisie
F
3

No idea why R has to redefine everything. Most normal programming languages call them "properties" or "attributes".

Fringe answered 19/12, 2018 at 13:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.