2011-01-17 9 views
64

¿Alguien sabe lo que es una ranura en R?R: ¿Qué son las tragamonedas?

No encontré la explicación de su significado. Consigo una definición recursiva: "retornos ranura de función o establecer información sobre las ranuras individuales de un objeto"

ayuda se agradece, gracias - Alley

+0

Eso es de la ayuda en la función 'slot()' - no está destinado a documentar qué es una ranura, solo cómo acceder a ellas. –

Respuesta

66

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

Internamente, eso representa 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, numberDoors, typeEngine y el kilometraje son ranuras de la clase S4 "coche". Este es un ejemplo trivial, en realidad las máquinas tragamonedas en sí mismas pueden ser nuevamente objetos complejos.

ranuras se puede acceder de muchas maneras:

> [email protected] 
[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 this question. Si el concepto aún le suena vago, una introducción general en Programación Orientada a Objetos podría ayudar.

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

+2

+1 buena respuesta Joris. Es posible que desee agregar un ejemplo de 'slot (aCar," price ")' solo como otro uso, especialmente cuando el operador estaba viendo la función 'slot()' –

+0

La buena idea, Gavin, será suficiente. –

+0

¡Gracias, tu respuesta fue muy útil! – user573347

10

Además de los recursos @Joris puntos que, además de a su propia respuesta, trata de leer ?Classes, que incluye los siguientes en las franjas horarias:

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. 
     .... 
15

Así como names(variable) listas de seguridad de todos los $ nombres de -hacerlas accesibles una variable compleja, también

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

Muy útil para descubrir los objetos que su objeto de ajuste contiene para su placer visual.