2009-07-24 6 views
97

Spesso mi ritrovo con una funzione che produce un output per il quale non capisco il tipo di dati di output. Mi aspetto una lista e finisce per essere una lista di liste o di un data frame o qualcos'altro. Qual è un buon metodo o flusso di lavoro per capire il tipo di dati di output quando si utilizza per la prima volta una funzione?Identificazione oggetto R

risposta

107

solito inizio con una combinazione di:

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

a seconda dei casi in base a ciò che è rivelato. Ad esempio, prova 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.

Se obj è un oggetto S3 o S4, si può anche provare methods o showMethods, showClass, ecc Patrick Burns' R Inferno ha una buona sezione su questo (seC# 7).

MODIFICA: Dirk e Hadley menzionano str(obj) nelle loro risposte. È davvero molto meglio di qualsiasi di questi per una sbirciatina veloce e persino dettagliata in un oggetto.

+1

non penso di aver fatto così tanto attraverso R Inferno. Grazie per avermi inviato di nuovo lì. –

+2

Nel caso in cui non lo si sia già visto, "oggetti S4 in 15 pagine o meno" [http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf] è un'altra buona lettura (con maggiori dettagli). – ars

+0

Non l'avevo visto. Grazie per il link. Quello valeva il prezzo dell'ammissione. :) –

10

Se ottengo 'someObject', dicono via

someObject <- myMagicFunction(...) 

allora io di solito procedere per

class(someObject) 
str(someObject) 

che può essere seguito da una testa(), sintesi(), stampa(),. .. a seconda della classe che hai.

+0

Appena provato str (obj). Molto più di quanto mi aspettassi da una rappresentazione di stringa; molto pulito! Grazie. – ars

6
attributes(someObject) 

può anche essere utile

47
str(x) 

È tutto ciò che occorre ricordare per il 99% dei casi.

+0

è perfetto. grazie mille – ManojGumber

+1

'' str (x, max.level = 1) '' può essere utile se x è un ggplot a più livelli! – PatrickT

+3

str (UCTURE) difficile da ricordare, perché continuo a pensare "stringa" ma oh, così utile. Dovremo solo dire STRUTTURA dieci volte. – Dmitri