# 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")
}
请注意,您必须将“liw”作为 UseMethod 的参数,而不是一些随机的废话。(查看手册以了解原因。)除了在泛型函数主体中调用 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 的手册。