S4 类 - 使用可变数量的参数重载方法
S4 classes - overload a method with a variable number of arguments
我想在我的 S4 泛型 myMethod
中有可变数量的参数,这样它们都是有效的:
myMethod(100)
myMethod(100, 200)
这是我尝试定义的:
setGeneric(
"myMethod",
function(x) {
standardGeneric("myMethod")
})
setMethod(
"myMethod",
signature = c("numeric"),
definition = function(x) {
print("MyMethod on numeric")
})
setMethod(
"myMethod",
signature = c("numeric", "numeric"),
definition = function(x, y) {
print("MyMethod on numeric, numeric")
})
然而,这给出了错误:
Error in matchSignature(signature, fdef) :
more elements in the method signature (2) than in the generic signature (1) for function ‘myMethod’
您的泛型应该支持 2 个参数。
setGeneric(
"myMethod",
function(x, y) {
standardGeneric("myMethod")
})
此外,您的第二个方法中的函数实际上应该支持两个参数:
setMethod(
"myMethod",
signature = c("numeric", "numeric"),
definition = function(x, y) {
print("MyMethod on numeric, numeric")
})
更一般地说,如果您想指定任意多个参数,您应该查看省略号参数 ...
。
值得澄清的是您是否要 dispatch(select 一种方法)超过一个参数(在这种情况下,包括 [=13 中的所有参数名称) =] setGeneric()
)
setGeneric("fun", function(x, y) standardGeneric("fun"),
signature=c("x", "y"))
setMethod("fun", c(x="numeric", y="numeric"), function(x, y) {
"fun,numeric,numeric-method"
})
与基于第一个的分派(仅包括 signature=
中的第一个参数)和要求所有方法都有额外的参数(在通用函数中命名参数)
setGeneric("fun", function(x, y) standardGeneric("fun"),
signature="x")
setMethod("fun", c(x="numeric"), function(x, y) {
"fun,numeric-method"
})
或仅部分方法(在泛型中使用...
,并在方法中命名参数)。
setGeneric("fun", function(x, ...) standardGeneric("fun"),
signature="x")
setMethod("fun", c(x="numeric"), function(x, y) {
"fun,numeric-method"
})
我想在我的 S4 泛型 myMethod
中有可变数量的参数,这样它们都是有效的:
myMethod(100)
myMethod(100, 200)
这是我尝试定义的:
setGeneric(
"myMethod",
function(x) {
standardGeneric("myMethod")
})
setMethod(
"myMethod",
signature = c("numeric"),
definition = function(x) {
print("MyMethod on numeric")
})
setMethod(
"myMethod",
signature = c("numeric", "numeric"),
definition = function(x, y) {
print("MyMethod on numeric, numeric")
})
然而,这给出了错误:
Error in matchSignature(signature, fdef) : more elements in the method signature (2) than in the generic signature (1) for function ‘myMethod’
您的泛型应该支持 2 个参数。
setGeneric(
"myMethod",
function(x, y) {
standardGeneric("myMethod")
})
此外,您的第二个方法中的函数实际上应该支持两个参数:
setMethod(
"myMethod",
signature = c("numeric", "numeric"),
definition = function(x, y) {
print("MyMethod on numeric, numeric")
})
更一般地说,如果您想指定任意多个参数,您应该查看省略号参数 ...
。
值得澄清的是您是否要 dispatch(select 一种方法)超过一个参数(在这种情况下,包括 [=13 中的所有参数名称) =] setGeneric()
)
setGeneric("fun", function(x, y) standardGeneric("fun"),
signature=c("x", "y"))
setMethod("fun", c(x="numeric", y="numeric"), function(x, y) {
"fun,numeric,numeric-method"
})
与基于第一个的分派(仅包括 signature=
中的第一个参数)和要求所有方法都有额外的参数(在通用函数中命名参数)
setGeneric("fun", function(x, y) standardGeneric("fun"),
signature="x")
setMethod("fun", c(x="numeric"), function(x, y) {
"fun,numeric-method"
})
或仅部分方法(在泛型中使用...
,并在方法中命名参数)。
setGeneric("fun", function(x, ...) standardGeneric("fun"),
signature="x")
setMethod("fun", c(x="numeric"), function(x, y) {
"fun,numeric-method"
})