2012-06-07 2 views
22

専門用語や短いコード例が必要です。異なるタイプのオブジェクトは、オブジェクトの名前を入力してEnterキーを押すとオブジェクトを出力する特定の方法を持ち、lmオブジェクトはモデルの要約を示し、ベクトルはベクトルの内容をリストします。必要な例:オブジェクトのデフォルトの印刷方法を変更してください

私は、特定の種類のオブジェクトの内容を「表示」するための独自の方法を作成できます。理想的には、私はこれを既存のタイプのオブジェクトから分離したいと考えています。

どうすればいいですか?

+1

「?メソッド」を参照してください - ページの下部に例があります。 – BenBarnes

+1

NAMESPACEを持つパッケージが提供するS3クラスオブジェクトの印刷メソッドを変更しようとしている場合は注意してください。すべてのパッケージは現代版のRです。既存の 'print()'メソッドに対して新しい 'printクラスのprintメソッドのローカルバージョンを 'assignInNamespace(....)'する必要があるかもしれません。 –

+0

BenとTip Gavinの方に感謝します。 –

答えて

25

ここでは、始めるための例を示します。 S3メソッドがどのように送出されるかの基本的な考え方が得られたら、methods("print")によって返された印刷メソッドを見て、より面白い印刷スタイルを実現する方法を見てください。

## 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

まさに私が必要としたもの。 "type" = "class"、 "output of" = "method" –

+0

mmのポイントは、オブジェクトがprint関数のクラス "myMatrix"作業? –

+0

うん。私は基本的には、主題全体を解読し、 'print.myMatrix'がどんなオブジェクトにも適用可能な別の関数であることを示すためにそれを含めました。 'print()'の呼び出しが評価されたときに呼び出される 'UseMethod'呼び出しによって見つけられる名前の' .myMatrix'部分のみが特別です。それがどれほど成功したかはわかりませんが、それは私の意図でした。 –

関連する問題