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?

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.


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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.