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?

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.


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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.