2012-06-07 13 views
22

Potrzebuję trochę pomocy ze żargonem i krótkim fragmentem przykładowego kodu. Różne rodzaje obiektów mają określony sposób wyprowadzania się po wpisaniu nazwy obiektu i naciśnięciu klawisza Enter, obiekt Lm pokazuje podsumowanie modelu, wektor wyświetla zawartość wektora.Przykład potrzebny: Zmień domyślną metodę drukowania obiektu

Chciałbym móc napisać własną drogę dla „pokazano” zawartości konkretnego typu obiektu. Idealnie, chciałbym móc oddzielić to od istniejących typów obiektów.

Jak miałbym to zrobić?

+1

Być może patrz "? Metody" - są przykłady w dolnej części strony. – BenBarnes

+1

Zachowaj ostrożność, jeśli próbujesz zmienić metodę drukowania obiektu klasy S3 dostarczoną przez pakiet z NAMESPACE, który jest wszystkim pakietem z nowoczesną wersją R. Jeśli napiszesz nową metodę 'print()' dla istniejącej class, możesz potrzebować 'assignInNamespace (....)' swojej lokalnej wersji metody drukowania. –

+0

Dzięki za wskazówkę Ben i końcówkę Gavin. –

Odpowiedz

25

Oto przykład, aby zacząć. Po zapoznaniu się z podstawowymi metodami wywoływania metod S3 zapoznaj się z dowolnymi metodami drukowania zwróconymi przez methods("print"), aby zobaczyć, jak możesz uzyskać bardziej interesujące style drukowania.

## Define a print method that will be automatically dispatched when print() 
## is called on an object of class "myMatrix" 
print.myMatrix <- function(x) { 
    n <- nrow(x) 
    for(i in seq_len(n)) { 
     cat(paste("This is row", i, "\t: ")) 
     cat(x[i,], "\n") 
     } 
} 

## Make a couple of example matrices 
m <- mm <- matrix(1:16, ncol=4) 

## Create an object of class "myMatrix". 
class(m) <- c("myMatrix", class(m)) 
## When typed at the command-line, the 'print' part of the read-eval-print loop 
## will look at the object's class, and say "hey, I've got a method for you!" 
m 
# This is row 1 : 1 5 9 13 
# This is row 2 : 2 6 10 14 
# This is row 3 : 3 7 11 15 
# This is row 4 : 4 8 12 16 

## Alternatively, you can specify the print method yourself. 
print.myMatrix(mm) 
# This is row 1 : 1 5 9 13 
# This is row 2 : 2 6 10 14 
# This is row 3 : 3 7 11 15 
# This is row 4 : 4 8 12 16 
+0

Dokładnie to, czego potrzebowałem. Mój język był błędny "typ" = "klasa", "sposób wyprowadzania" = "metoda" –

+0

Punktem w mm było pokazanie mi, że obiekt nie musiał być klasy "myMatrix" dla funkcji drukowania do praca? –

+0

Tak. Zasadniczo włączyłem go, aby pomóc w demistyfikacji całego tematu i pokazać, że 'print.myMatrix' to tylko inna funkcja, którą można zastosować do dowolnego obiektu. Jedyną rzeczą wyjątkową jest nazwa ".myMatrix", która pozwala na jej odnalezienie przez wywołanie 'UseMethod', które wywoływane jest, gdy oceniane jest wywołanie funkcji' print() '. Nie jestem pewna, jaki to był sukces, ale taki był mój zamiar. –

Powiązane problemy