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
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.
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.
Appena provato str (obj). Molto più di quanto mi aspettassi da una rappresentazione di stringa; molto pulito! Grazie. – ars
attributes(someObject)
può anche essere utile
str(x)
È tutto ciò che occorre ricordare per il 99% dei casi.
è perfetto. grazie mille – ManojGumber
'' str (x, max.level = 1) '' può essere utile se x è un ggplot a più livelli! – PatrickT
str (UCTURE) difficile da ricordare, perché continuo a pensare "stringa" ma oh, così utile. Dovremo solo dire STRUTTURA dieci volte. – Dmitri
non penso di aver fatto così tanto attraverso R Inferno. Grazie per avermi inviato di nuovo lì. –
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
Non l'avevo visto. Grazie per il link. Quello valeva il prezzo dell'ammissione. :) –