Identyfikacja obiektu R.

120

Często kończę z funkcją generującą dane wyjściowe, dla których nie rozumiem typu danych wyjściowych. Oczekuję listy, która kończy się listą list lub ramką danych lub czymś innym. Jaka jest dobra metoda lub przepływ pracy do określenia typu danych wyjściowych podczas pierwszego użycia funkcji?

JD Long
źródło

Odpowiedzi:

126

Zwykle zaczynam od kombinacji:

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

stosownie do tego, co zostało ujawnione. Na przykład spróbuj z:

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)

..itp.

Jeśli objjest obiektem S3 lub S4, można także spróbować methodsalbo showMethods, showClassitp Patrick Burns' R Inferno jest całkiem niezły rozdział na ten temat (sekcja # 7).

EDYCJA : Dirk i Hadley wspominają str(obj)w swoich odpowiedziach. To naprawdę jest znacznie lepsze niż którekolwiek z powyższych, jeśli chodzi o szybkie i szczegółowe spojrzenie na obiekt.

ars
źródło
1
Myślę, że nie dotarłem tak daleko przez R Inferno. Dzięki za odesłanie mnie tam.
JD Long
3
Jeśli jeszcze tego nie widzieliście, „Obiekty S4 na 15 lub mniej stronach” [ stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf ] to kolejna dobra lektura (ze szczegółami).
ars
Nie widziałem tego. Dzięki za link. To było warte ceny wstępu. :)
JD Long
Stworzyłem małą funkcję użytkową, która koduje tę sugestię. Zobacz tellMeAboutThis.r
eludom
65
str(x)

To wszystko, o czym musisz pamiętać w 99% przypadków.

hadley
źródło
2
str(x, max.level=1)może być przydatne, jeśli x jest wielowarstwowym ggplot!
PatrickT
7
str (UCTURE) trudne do zapamiętania, ponieważ ciągle myślę „string”, ale och, takie przydatne. Wystarczy dziesięć razy powiedzieć STRUKTURA.
Dmitri
13

Jeśli otrzymam „someObject”, powiedz przez

someObject <- myMagicFunction(...)

wtedy zwykle postępuję dalej

class(someObject)
str(someObject)

po którym może następować head (), summary (), print (), ... w zależności od posiadanej klasy.

Dirk Eddelbuettel
źródło
Właśnie spróbowałem str (obj). O wiele więcej, niż się spodziewałem po reprezentacji typu string; bardzo schludny! Dzięki.
ars
9
attributes(someObject) 

Może być również przydatna

Josh Reich
źródło