R Objektidentifikation

119

Ich habe oft eine Funktion, die eine Ausgabe erzeugt, für die ich den Ausgabedatentyp nicht verstehe. Ich erwarte eine Liste und es wird eine Liste von Listen oder ein Datenrahmen oder etwas anderes. Was ist eine gute Methode oder ein guter Workflow, um den Ausgabedatentyp zu ermitteln, wenn Sie eine Funktion zum ersten Mal verwenden?

JD Long
quelle

Antworten:

126

Normalerweise beginne ich mit einer Kombination aus:

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

je nach dem, was enthüllt wurde. Versuchen Sie zum Beispiel mit:

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.

Wenn objist Objekt ein S3 oder S4, können Sie auch versuchen , methodsoder showMethods, showClassusw. Patrick Burns R Inferno hat einen ziemlich guten Abschnitt über diese (s # 7).

EDIT : Dirk und Hadley erwähnen str(obj)in ihren Antworten. Es ist wirklich viel besser als jedes der oben genannten, um schnell und gleichmäßig einen Blick in ein Objekt zu werfen.

ars
quelle
1
Ich glaube nicht, dass ich es so weit durch R Inferno geschafft habe. Danke, dass du mich dorthin zurückgeschickt hast.
JD Long
3
Falls Sie es noch nicht gesehen haben, ist "S4-Objekte auf 15 Seiten oder weniger" [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] eine weitere gute Lektüre (mit weiteren Details).
Ars
Das hatte ich nicht gesehen. Danke für den Link. Das war den Eintrittspreis wert. :)
JD Long
Ich habe eine kleine Utility-Funktion erstellt, die diesen Vorschlag codiert. Siehe tellMeAboutThis.r
eludom
64
str(x)

Es ist alles, woran Sie sich in 99% der Fälle erinnern müssen.

Hadley
quelle
2
str(x, max.level=1)kann nützlich sein, wenn x ein mehrschichtiges ggplot ist!
PatrickT
7
str (UCTURE) schwer zu merken, weil ich immer wieder "string" denke, aber oh, so nützlich. Muss nur zehnmal Struktur sagen.
Dmitri
13

Wenn ich 'someObject' bekomme, sagen Sie via

someObject <- myMagicFunction(...)

dann gehe ich normalerweise vorbei

class(someObject)
str(someObject)

Darauf können je nach Klasse head (), summary (), print (), ... folgen.

Dirk Eddelbuettel
quelle
Habe gerade str (obj) ausprobiert. Weit mehr als ich von einer String-Darstellung erwartet hatte; sehr gepflegt! Vielen Dank.
Ars
9
attributes(someObject) 

Kann auch nützlich sein

Josh Reich
quelle