Identificazione dell'oggetto R.


119

Spesso mi ritrovo con una funzione che produce output per il quale non capisco il tipo di dati di output. Mi aspetto un elenco e finisce per essere un elenco di elenchi o 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?

Risposte:


126

Di solito inizio con una combinazione di:

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

come appropriato in base a quanto 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)

..eccetera.

Se objè un oggetto S3 o S4, puoi anche provare methodso showMethods, showClassecc. R Inferno di Patrick Burns ha una sezione abbastanza buona su questo (sec # 7).

EDIT : Dirk e Hadley menzionano str(obj)nelle loro risposte. È davvero molto meglio di quanto sopra per una sbirciatina rapida e persino dettagliata di un oggetto.


1
Non credo di essere arrivato così lontano attraverso R Inferno. Grazie per avermi rimandato lì.
JD Long,

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

Non l'avevo visto. Grazie per il collegamento. Valeva il prezzo del biglietto. :)
JD Long,

Ho creato una piccola funzione di utilità che codifica questo suggerimento. Vedi tellMeAboutThis.r
eludom

65
str(x)

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


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

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

13

Se ottengo "someObject", dì tramite

someObject <- myMagicFunction(...)

poi di solito procedo

class(someObject)
str(someObject)

che può essere seguito da head (), summary (), print (), ... a seconda della classe che hai.


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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.