2009-07-24 6 views
97

Je finis 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 elle finit par être une liste de listes ou un cadre de données ou autre chose. Quelle est une bonne méthode ou un bon workflow pour déterminer le type de données de sortie lors de la première utilisation d'une fonction?Identification d'objet R

Répondre

107

Je commence habituellement avec une combinaison de:

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

selon le cas en fonction de ce qui est 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.

Si obj est un S3 ou S4 objet, vous pouvez aussi essayer methods ou showMethods, showClass, etc. Patrick Burns R Inferno a une section assez bonne sur ce (s # 7).

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

+1

Je ne pense pas que je l'ai fait aussi loin à travers R Inferno. Merci de m'avoir renvoyé là-bas. –

+2

Dans le cas où vous ne l'avez pas déjà vu, "S4 objets en 15 pages ou moins" [http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf] est une autre bonne lecture (avec plus de détails). – ars

+0

Je n'avais pas vu ça. Merci pour le lien. Cela valait le prix d'admission. :) –

10

Si je reçois 'someObject', disent par

someObject <- myMagicFunction(...) 

puis je procède habituellement par

class(someObject) 
str(someObject) 

qui peut être suivie par la tête(), résumé(), impression(),. .. selon la classe que vous avez.

+0

Juste essayé str (obj). Bien plus que ce que j'attendais d'une représentation sous forme de chaîne; très propre! Merci. – ars

6
attributes(someObject) 

peut également être utile

47
str(x) 

C'est tout ce dont vous avez besoin de vous souvenir dans 99% des cas.

+0

son parfait. merci beaucoup – ManojGumber

+1

'' str (x, max.level = 1) '' peut être utile si x est un ggplot multicouche! – PatrickT

+3

str (UCTURE) difficile à retenir, parce que je continue à penser "chaîne" mais oh, si utile. Il suffit de dire STRUCTURE dix fois. – Dmitri