Identification d'objet R

119

Je me retrouve souvent avec une fonction produisant une sortie pour laquelle je ne comprends pas le type de données de sortie. J'attends une liste et cela finit par être une liste de listes ou un bloc de données ou autre chose. Quelle est une bonne méthode ou un bon flux de travail pour déterminer le type de données de sortie lors de la première utilisation d'une fonction?

JD Long
la source

Réponses:

126

Je commence généralement par une combinaison de:

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

le cas échéant en fonction de ce qui a été révélé. Par exemple, essayez avec:

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.

S'il objs'agit d'un objet S3 ou S4, vous pouvez également essayer methodsou showMethods, showClassetc. Le R Inferno de Patrick Burns a une très bonne section à ce sujet (sec # 7).

EDIT : Dirk et Hadley mentionnent str(obj)dans leurs réponses. C'est vraiment bien mieux que tout ce qui précède pour un aperçu rapide et même détaillé d'un objet.

ars
la source
1
Je ne pense pas avoir réussi à traverser R Inferno. Merci de m'avoir renvoyé là-bas.
JD Long
3
Au cas où vous ne l'auriez pas déjà vu, "Objets S4 en 15 pages ou moins" [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] est une autre bonne lecture (avec plus de détails).
ars
Je n'avais pas vu ça. Merci pour le lien. Cela valait le prix d'entrée. :)
JD Long
J'ai créé une petite fonction utilitaire qui encode cette suggestion. Voir tellMeAboutThis.r
eludom
65
str(x)

C'est tout ce dont vous devez vous souvenir pour 99% des cas.

hadley
la source
2
str(x, max.level=1)peut être utile si x est un ggplot multicouche!
PatrickT
7
str (UCTURE) difficile à retenir, parce que je continue de penser "string" mais oh, tellement utile. Devra juste dire la structure dix fois.
Dmitri
13

Si j'obtiens 'someObject', dites via

someObject <- myMagicFunction(...)

alors je procède habituellement par

class(someObject)
str(someObject)

qui peut être suivi de head (), summary (), print (), ... selon la classe que vous avez.

Dirk Eddelbuettel
la source
Je viens d'essayer str (obj). Bien plus que ce à quoi je m'attendais d'une représentation sous forme de chaîne; très propre! Merci.
ars
9
attributes(someObject) 

Peut aussi être utile

Josh Reich
la source