我正在学习S4的类和方法,我搞不清楚什么时候使用.Object和object(用作类上函数的参数)。我不明白它们之间有什么区别。
例如,Would be correct:
setGeneric("getTimes",function(object){standardGeneric ("getTimes")})
setMethod("getTimes","Trajectories",
function(object){
return(object@times)
}
)
或:
setGeneric("getTimes",function(.Object){standardGeneric ("getTimes")})
setMethod("getTimes","Trajectories",
function(.Object){
return(.Object@times)
}
)
1条答案
按热度按时间kuuvgm7e1#
首先,应该避免使用
{standardGeneric("getTimes")}
周围的花括号。您问题的简短答案:示例中的两段代码没有区别。您将
getTimes
定义为自己的一个全新泛型函数。您可以指定其参数名称,无论您喜欢什么(object
,x
,xobject
,.Object
)。然后,当您编写泛型函数的方法时,方法的参数名必须与泛型函数的参数名匹配。例如:如果不遵循,就会出现错误(从技术上讲,这是一个警告,因为R会自动/"静默"地纠正它。但是,在我看来,在这种情况下,R应该停止并抛出一个错误):
如果你想为现有的泛型定义方法,你应该使用函数
method.skeleton
。例一:
例2,
show
是一个预定义的泛型,用object
作为参数(见?show
),或者你可以输入show
而不用括号来检查。因此,setMethod("show", "Trajectories", function(.Object) .Object)
将是错误的。你可以继续使用这种方法,但是,我认为method.skeleton
是一个非常有用的选择:示例3,
initialize
是通用函数,并且可以定义其自变量.Object
(输入initialize
,不带括号)。据我理解,在本例中选择.Object
作为参数名的原因是为了唤起原型对象的感觉(你可以在?initialize
上阅读更多)类似于示例2,使用method.skeleton
helper函数:<-
)有一个特殊情况,即它的最后一个参数必须命名为value
。阅读更多信息。例如:如果在定义泛型和伴随方法时使用其他名称(下面的
new_value
),R将不会输出任何错误或警告。但是,当您使用它时,R将错误: