R identificación de objeto


119

A menudo termino con una función que produce una salida para la que no entiendo el tipo de datos de salida. Espero una lista y termina siendo una lista de listas o un marco de datos o algo más. ¿Cuál es un buen método o flujo de trabajo para averiguar el tipo de datos de salida cuando se usa por primera vez una función?

Respuestas:


126

Normalmente empiezo con una combinación de:

typeof(obj)
class(obj)
sapply(obj, class)
sapply(obj, attributes)
attributes(obj)
names(obj)

según corresponda según lo revelado. Por ejemplo, intente con:

obj <- data.frame(a=1:26, b=letters)
obj <- list(a=1:26, b=letters, c=list(d=1:26, e=letters))
data(cars)
obj <- lm(dist ~ speed, data=cars)

..etc.

Si objes un objeto S3 o S4, también puedes probar methodso showMethods, showClassetc. El R Inferno de Patrick Burns tiene una sección bastante buena sobre esto (sec. # 7).

EDITAR : Dirk y Hadley mencionan str(obj)en sus respuestas. Realmente es mucho mejor que cualquiera de los anteriores para un vistazo rápido e incluso detallado a un objeto.


1
No creo que haya llegado tan lejos a través de R Inferno. Gracias por enviarme de regreso.
JD Long

3
En caso de que aún no lo haya visto, "Objetos S4 en 15 páginas o menos" [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] es otra buena lectura (con más detalles).
ars

No había visto eso. Gracias por el enlace. Valió la pena el precio de la entrada. :)
JD Long

He creado una pequeña función de utilidad que codifica esta sugerencia. Ver tellMeAboutThis.r
eludom

65
str(x)

Es todo lo que necesita recordar para el 99% de los casos.


2
str(x, max.level=1)puede ser útil si x es un ggplot de varias capas.
PatrickT

7
str (UCTURE) es difícil de recordar, porque sigo pensando en "cadena" pero, oh, muy útil. Tendré que decir ESTRUCTURA diez veces.
Dmitri

13

Si obtengo 'someObject', di via

someObject <- myMagicFunction(...)

entonces normalmente procedo por

class(someObject)
str(someObject)

que puede ir seguido de head (), summary (), print (), ... dependiendo de la clase que tengas.


Intenté str (obj). Mucho más de lo que esperaba de una representación de cadena; ¡muy aseado! Gracias.
ars

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.