R: ¿que son las tragamonedas?

79

¿Alguien sabe qué es una ranura en R?

No encontré la explicación de su significado. Obtengo una definición recursiva: "La función de ranura devuelve o establece información sobre las ranuras individuales de un objeto"

Se agradecería su ayuda, gracias - Callejón

usuario573347
fuente
Eso es de la ayuda sobre la slot()función: no está destinado a documentar qué es una ranura, solo cómo acceder a ella.
Gavin Simpson

Respuestas:

87

Las ranuras están vinculadas a objetos S4. Una ranura puede verse como una parte, un elemento o una "propiedad" de un objeto. Supongamos que tiene un objeto de automóvil, entonces puede tener las ranuras "precio", "número de puertas", "tipo de motor", "kilometraje".

Internamente, eso se representa como una lista. Un ejemplo :

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

Aquí, el precio, el número de puertas, el tipo de motor y el kilometraje son ranuras de la clase S4 "Coche". Este es un ejemplo trivial, en realidad las mismas tragamonedas pueden volver a ser objetos complejos.

Se puede acceder a las tragamonedas de varias formas:

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

o mediante la construcción de un método específico (ver documentación adicional).

Para obtener más información sobre la programación de S4, consulte esta pregunta . Si el concepto aún le suena vago, una introducción general a la programación orientada a objetos podría ayudar.

PD: tenga en cuenta la diferencia con los marcos de datos y las listas, donde usa $para acceder a variables / elementos con nombre.

Joris Meys
fuente
3
+1 buena respuesta Joris. Es posible que desee agregar un ejemplo de slot(aCar, "price")otro uso, especialmente porque el operador estaba mirando la slot()función
Gavin Simpson
Gracias, tu respuesta fue muy útil !!
user573347
9
Y para conseguir todas las plazas de una clase, las hay getSlots(), o slotNames()por sus nombres.
Laurent
18

Al igual que names(variable)enumera todos los $nombres accesibles de una variable compleja, también

slotNames(object) enumera todas las ranuras de un objeto.

Muy útil para descubrir las ventajas que contiene su objeto de ajuste para su placer visual.

tim
fuente
10

Además de los recursos que @Joris le señala, más su propia respuesta, intente leer ?Classes, que incluye lo siguiente en las tragamonedas:

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

No tengo idea de por qué R tiene que redefinir todo. La mayoría de los lenguajes de programación normales los llaman "propiedades" o "atributos".

Max
fuente
Este es un comentario legítimo. Admitamos que R está lleno de opciones de diseño extravagantes.
King Crimson
Puedo entender una terminología extraña para las características que datan de los años 70, pero las tragamonedas no se encuentran entre ellas, se agregaron en realidad cuando la mayoría de los lenguajes OO tenían diez años atrás.
Max