# liw.mstreeClass <- function(nb, data, method, p) UseMethod("nbcosts"){
# Error: unexpected '{' in "liw.mstreeClass <- function(nb, data, method, p)
まず、ここに構文エラーがあります。中括弧を使用して複数の式をグループ化できますが、式の後に中括弧を開始することはできません。
比較...
mean(1)
... と ...
mean(1){
# error!!
次に、S3 では、既存のジェネリック関数のメソッドを定義します。したがって、複数のクラスに適用できる "liw" 関数がある場合、liw.mstreeClass は、"mstreeClass" というクラスの "liw" を実行する方法を定義します。そのため、最初に liw をジェネリック関数として定義する必要があります。
liw<-function(x,...){
UseMethod("liw")
}
UseMethod の引数として "liw" を指定する必要があることに注意してください。ランダムながらくたではありません。(理由を理解するには、マニュアルを参照してください。) ジェネリック関数の本体で UseMethod の呼び出し以外に多くのコードを使用することはめったにありません。
それができたら、liw の mstreeClass メソッドを定義できます。例えば、
liw.mstreeClass<-function(x, y, z){
paste("liw equals ", x + y + z)
}
S3 でのメソッド ディスパッチは最初の引数に基づいているため、x にはクラス "mstreeClass" が必要であることに注意してください。その場合のみ、liw(x) は liw.mstreeClass(x) に送られます。また、ジェネリックの最初の引数として x がある場合、すべてのメソッドの最初の引数も x と呼ぶ必要があると思います。
UseMethod("nbcosts"){"
if(method=="penrose") { liw <- mat2listw(penroseDis.mstreeClass((scale(data))))
return(liw)}
Error: object 'method' not found
}
Error: unexpected '}' in " }"
うーん..申し訳ありませんが、これらの行はあまり意味がありません。UseMethod の使用方法については、上記またはマニュアルを参照してください。