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?

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.


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.