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?

JD Long
fuente

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.

ars
fuente
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.

Hadley
fuente
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.

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

También puede ser útil

Josh Reich
fuente