2009-07-24 11 views
97

A menudo termino con una función que produce salida para la que no entiendo el tipo de datos de salida. Estoy esperando una lista y termina siendo una lista de listas o un marco de datos u otra cosa. ¿Cuál es un buen método o flujo de trabajo para determinar el tipo de datos de salida cuando se usa por primera vez una función?Identificación de objeto R

Respuesta

107

Por lo general comienzan con una combinación de:

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

en su caso sobre la base de lo que está 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 obj es un objeto S3 o S4, también puede probar methods o showMethods, showClass, etc. Patrick Burns R Inferno tiene una muy buena sección sobre esto (seg 7 #).

EDIT: 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 haber llegado tan lejos a través de R Inferno. Gracias por enviarme allí. –

+2

En caso de que no lo haya visto ya, "objetos S4 en 15 páginas o menos" [http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf] es otra buena lectura (con más detalles). – ars

+0

No había visto eso. Gracias por el enlace. Eso valió el precio de la entrada. :) –

10

Si consigo 'someObject', dicen a través de

someObject <- myMagicFunction(...) 

entonces yo por lo general proceden por

class(someObject) 
str(someObject) 

que puede ser seguido por la cabeza(), resumen(), print(),. .. dependiendo de la clase que tengas

+0

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

6
attributes(someObject) 

también puede ser útil

47
str(x) 

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

+0

es perfecto. muchas gracias – ManojGumber

+1

'' str (x, max.level = 1) '' puede ser útil si x es un ggplot multicapa! – PatrickT

+3

str (UCTURE) difícil de recordar, porque sigo pensando en "cuerda", pero ay, qué útil. Solo tendrá que decir ESTRUCTURA diez veces. – Dmitri

Cuestiones relacionadas