2012-04-06 6 views
2

Für einige Pakete kann ich spezielle Art von Objekten sehen. Zum Beispiel bekomme ich die folgende Nachricht, wenn ich versuche, ein Dataset aus einem Paket zu drucken.Erstellen spezieller Datenobjekte in r

Multitrait

This is an object of class "cross". 
    It is too complex to print, so we provide just this summary. 
    RI strains via selfing 

    No. individuals: 162 

......................and other summary information 

ist (Multitrait)

[1] "riself" 

Ich frage mich, wie wir solches Objekt erstellt werden. Sind sie spezielle Listen von Datenrahmen, Matrix von Vektor.

X <- c("A", "B", "C") 
Y <- data.frame (A = 1:10, B = 21:30, C = 31:40) 
myeq <- c("Y ~ X1 + Y1") 
K <- 100 
A = 1:20 
B = B= 21:40 
J <- as.matrix(A,B) 
myl1 <- list(J, K) 

Jetzt ist mein komplexes Objekt:

mycomplexobject <- list(X, Y, myeq, K, J, myl1) 
mycomplexobject 
str(mycomplexobject) 

List of 6 
$ : chr [1:3] "A" "B" "C" 
$ :'data.frame':  10 obs. of 3 variables: 
    ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10 
    ..$ B: int [1:10] 21 22 23 24 25 26 27 28 29 30 
    ..$ C: int [1:10] 31 32 33 34 35 36 37 38 39 40 
$ : chr "Y ~ X1 + Y1" 
$ : num 100 
$ : int [1:20, 1] 1 2 3 4 5 6 7 8 9 10 ... 
$ :List of 2 
    ..$ : int [1:20, 1] 1 2 3 4 5 6 7 8 9 10 ... 
    ..$ : num 100 

ist (mycomplexobject)

[1] "list" "vector" 

Gibt es Art und Weise spezielles Objekt zu machen und wie stattdessen Nachricht Druck ganze Liste zu verhindern " es ist komplex zu drucken "und stattdessen eine Zusammenfassung zu liefern?

+0

Sie können bessere Antworten bekommen über R auf CrossValidated über - http://stats.stackexchange.com – arboc7

+0

@ arboc7, Dies ist eine Frage, über R-Programmierung, nicht über R für Statistik mit. Es gehört hier auf SO. –

Antwort

6

Setzen Sie einfach die class Ihres Objekts und stellen Sie eine print Methode zur Verfügung.

class(mycomplexobject) <- c("too_complex", class(mycomplexobject)) 
print.too_complex <- function(x) { 
    cat("Complex object of length", length(x), "\n") 
} 
mycomplexobject 
+0

oh nett ... danke ... wenn ich solche Objekte strende kann ich etwas wie "- attr (*," class ") = chr [1: 2]" riself "" cross "" sehen, was könnte das bedeuten ?? – jon

+1

'class' ist nur ein Attribut (d. H. Metadaten) , das Sie an jedes Objekt anhängen können. Einige Methoden, wie "print" oder "plot", sind generisch, d. H. Sie hängen vom Typ ihres ersten Arguments ab: Sie können 'Methoden (print)' oder 'Methoden (plot)' überprüfen. Das Attribut 'class' enthält alle Klassen, zu denen das Objekt gehört (so ist die Mehrfachvererbung implementiert): In Ihrem Beispiel hat das Objekt die Klassen' riself' (abgeleitete Klasse) und 'cross' (Elternklasse) . Wenn Sie es ausdrucken, sucht R nach den folgenden Methoden: 'print.riself',' print.cross', 'print.default' und verwenden Sie die erste, die existiert. –