2016-08-05 9 views
2

Alle, Ich bin ein Anfänger in R. Ich bin nicht so vertraut mit der Organisation von Klassen in R. Ich habe festgestellt, dass einige class() Aufrufe einen Klassen-Typ zurückgeben , während andere mehrere Klassennamen zurückgeben.Klasse() gibt mehrere Klassennamen zurück in R

Beispiel 1

{Mein Objektnamen ist "sassign"} meine Daten hier:

acctnum gender state zip zip3 first last book_ nonbook_ total_ purch child youth cook do_it refernce art geog buyer 
1 10001  M NY 10605 106 49 29 109  248 357 10  3  2 2  0  1 0 2 no 
2 10002  M NY 10960 109 39 27 35  103 138  3  0  1 0  1  0 0 1 no 
3 10003  F PA 19146 191 19 15 25  147 172  2  0  0 2  0  0 0 0 no 
4 10004  F NJ 07016 070  7 7 15  257 272  1  0  0 0  0  1 0 0 no 
5 10005  F NY 10804 108 15 15 15  134 149  1  0  0 1  0  0 0 0 no 
6 10006  F NY 11366 113  7 7 15  98 113  1  0  1 0  0  0 0 0 yes 

Nun, wenn ich Klasse tun (Objekt) oben, die ich erhalten:

class(sassign) 
[1] "data.frame" 

ich bin mit diesem gut. Ich verstehe, dass diese Datenstruktur vom Typ Datenrahmen ist.

Beispiel 2 Jetzt stieß ich kürzlich auf Wickhams tibbleR-Paket. Hier ist, wie ich Datenrahmen zu Tibble umgewandelt:

tib_sassign<-as_data_frame(sassign) 
class(tib_sassign) 
[1] "tbl_df"  "tbl"  "data.frame" 

Dies ist, wo ich verloren war. Ich kenne die Unterschiede zwischen tbl_df und tbl nicht. Allerdings ist meine Hypothese, dass Tibble Paket durch unser Leben einfacher macht Objekte (ähnlich abstrakte Klassen) Rückkehr, die als tibble verwendet werden können („TBL“), Datenrahmen („data.frame“) oder tbl_df (Ich habe keine Hinweis was tbl_df bedeutet). Ich habe das Online-PDF des dplyr-Pakets durchgelesen, aber ich glaube nicht, dass sie das erklärt haben. Ich glaube, sie gehen davon aus, dass die Leute wissen, was das oben bedeutet.

I RStudio Blog auf https://blog.rstudio.org/2016/03/24/tibble-1-0-0/ lesen, aber ich glaube nicht, dass sie das, was bedeutet, dass die Ausgabe oben beschrieben haben. Ich habe auch das Buch von Norman Matloff gelesen, aber ich glaube nicht, dass dies gedeckt ist. Ich googelte auch "tbl_df" "tbl" "data.frame", aber die meisten Ergebnisse bezogen sich auf ein Stück Code, der nicht funktionierte. Ich konnte keine Erklärung dafür finden, was der obige Ausdruck bedeutet. Dies ist, wo ich an einen Punkt gekommen, dass ich auf diesen Thread starten

Beispiel 3 ich jetzt bei Time Series in R. zu suchen begonnen haben. Hier ist, was ich getan habe:

t_sassign <-data.frame(group_by(sassign,last)) 
t_sassign<-ts(t_sassign,start = c(2014,1),frequency = 12) 
class(t_sassign) 
[1] "mts" "ts"  "matrix" 

Hier „letzte“ ist die Anzahl der Monate. Ich glaube zwar, dass ich irgendwie damit zurechtkomme, was ich tun muss, aber ich verstehe immer noch nicht, was das oben genannte Ergebnis bedeutet.

Ich suchte auch durch Stackoverflow, aber die meisten Ergebnisse sprechen über Klasse in JAVA zurück.

Ich habe drei Fragen:

Frage 1) Es wird fantastisch, wenn jemand ein Beispiel nennen könnte, so dass ich die Ausgabe von Klasse verstehen kann()

Frage 2) I‘ Ich schätze es auch, wenn jemand einen Ausschnitt mit einer Anwendung des in Frage 1 besprochenen Konzepts bereitstellen könnte. Auf diese Weise kann ich dieses Konzept für immer in meinem Gehirn registrieren.

Frage 3) Wenn Sie ein Buch kennen, das in solche Konzepte geht, würde ich es schätzen.Ich folge R in Action von Kabackoff, R von Norman Matloff und StackOverflow.

Vielen Dank im Voraus für Ihre Hilfe.


(Added) Hier ist eine andere Sache verwirrend: Als ich das tat:

AP<-AirPassengers 
class(AP) 
[1] "ts" 

Ich habe "ts" als Klassentyp. Vererbte Klassen wurden nicht gezeigt. Ich bin wirklich verloren. Bitte hilf mir!

+1

ich denke, das ist einfach vom Thema hier, weil dies eine große Frage zu einem Grundkonzept der R; Sie können jedoch nachlesen, was 'class' hier zurückgibt: http://adv-r.had.co.nz/S3.html –

+0

Keine schlechte Frage. Unverständlicher Downvote. –

+0

Vielen Dank, Konrad. Ich habe den von Ihnen geposteten Link durchsucht. Ich glaube jedoch, Wickham konzentriert sich mehr auf Threads und Nesting. Ich bin mir nicht ganz sicher, ob er über die drei Klassen in class() spricht. Bitte korrigieren Sie mich, wenn ich falsch liege. Ich habe Tonnen von Material im Internet durchforstet, aber ich konnte keine Ressource finden. Wenn Sie es erklären können, würde ich es begrüßen. – watchtower

Antwort

1

Dies ist nicht etwas von Base R, sondern eher ein Merkmal von dem, was oft als "Hadleyverse" bezeichnet wird. Hadley hat das dplyr-Paket entwickelt, um mit einer speziellen Version von Datenrahmen zu arbeiten. Siehe: http://www.rdocumentation.org/packages/tibble/versions/1.1/topics/tibble-package für eine Beschreibung der Klasse tbl_df. Diese Klasse hat Versionen von print, "[" und "[["], die sich von jenen Funktionen von Basis-R unterscheiden, die normalerweise Datenrahmen behandeln würden, wie dort beschrieben. Unterschiedliche Druckformate und -regeln, $ und [[ führen niemals einen teilweisen Namensabgleich durch, und die Teilmengenbildung gibt immer einen data.frame zurück.

Re: eine separate Beschreibung für die Tbl-Klasse. Was ich bis jetzt gefunden habe suggeriert mir, dass dplyr-Package-Dokumente der Ort sind, zu suchen, da es as.tbl und Beschreibungen von Differenzmethoden für verschiedene Arten von Datenquellen wie SQL-Server hat.

Eine Korrektur. Das Paket NICHT tibbleR gestattet

Für Sie letzte Frage (unter Hinweis darauf, dass mehren Fragen in SO verpönt) Sie können sehen, dass ?inherits manchmal, aber nicht immer sagen, wenn ein Objekt = ist ein Mitglied einer „impliziten“ -Klasse und dass Sie müssen eine is- Funktion verwenden für ‚numerischen‘ zu testen:

> AP<-AirPassengers 
> class(AP) 
[1] "ts" 
> inherits(AP, "matrix") 
[1] FALSE 
> inherits(AP, "numeric") 
[1] FALSE 
> str(AP) 
Time-Series [1:144] from 1949 to 1961: 112 118 132 129 121 135 148 148 136 119 ... 
> inherits(as.matrix(AP), "numeric") 
[1] FALSE 
> inherits(as.matrix(AP), "matrix") 
[1] TRUE 
> str(as.matrix(AP)) 
num [1:144, 1] 112 118 132 129 121 135 148 148 136 119 ... 
> inherits(as.matrix(AP), "integer") 
[1] FALSE 
> is.numeric(as.matrix(AP)) 
[1] TRUE 
> ?inherits 
Verwandte Themen