相关疑难解决方法(0)

在R中使用callNextMethod()传递参数的问题

我的问题:

为什么callNextMethod()不按预期将参数传递给下一个方法?

情况:

假设我有两个分层类foobar(bar是它的子类foo),我有一个foobar可以为两个类分派的方法(即,有两个类的方法).

此外,(子)类bar的方法foo在进行一些计算之后调用该方法callNextMethod().

两种方法都有相同的附加参数(默认值)应该传递给方法foo,只有它是相关的.

setClass("foo", representation(x = "numeric"))
setClass("bar", contains = "foo")

setGeneric("foobar", function(object, ...) standardGeneric("foobar"))

setMethod("foobar", "foo", function(object, another.argument = FALSE, ...) {
    print(paste("in foo-method:", another.argument))
    if (another.argument) object@x^3
    else object@x^2
})

setMethod("foobar", "bar", function(object, another.argument = FALSE, ...) {
    print(paste("in bar-method:", another.argument))
     object@x <- sqrt(object@x)
    callNextMethod()
})
Run Code Online (Sandbox Code Playgroud)

问题描述:
参数未按预期传递,但默认值取自方法定义.具体来说,在第一种方法中,参数是在call(TRUE)中指定的,但是,它会FALSE在下一个方法中更改.

o1 <- new("bar", …
Run Code Online (Sandbox Code Playgroud)

oop methods r argument-passing s4

7
推荐指数
1
解决办法
668
查看次数

S4类[(子集)继承与附加参数

这是在R中的访问器函数中使用callNextMethod()的扩展.

更新2017-03-25:为了说明这在加载方法时如何失败,而不是在构建的包中,我创建了一个虚拟包:https://github.com/zkamvar/inheritest#readme

基本问题:

我有一个继承另一个类foo的类栏,它们都有[method]的附加参数.foo的方法一致,但是第一次使用后bar的方法失败了.

错误和回溯:

Error in callNextMethod(x, i, j, ..., drop): bad object found as method (class "function")

4: stop(gettextf("bad object found as method (class %s)",  dQuote(class(method))), 
   domain = NA)
3: callNextMethod(x, i, j, ..., drop) at #9
2: .local(x, i, j, ..., drop = drop)
1: BAR["x"]
Run Code Online (Sandbox Code Playgroud)

更多详情:

我有一个包实现了一个依赖于另一个包中的类的类.构建包时,一切正常,但是当我的包被简单地加载(使用devtools::load_all("."))时,我得到下面的行为.

最低工作范例:


foo <- setClass("foo", representation(x = "numeric", y = "numeric"))
bar <- setClass("bar", representation(distance = "numeric"), contains = "foo")

setMethod(f = "[", …
Run Code Online (Sandbox Code Playgroud)

inheritance r s4

5
推荐指数
1
解决办法
317
查看次数

标签 统计

r ×2

s4 ×2

argument-passing ×1

inheritance ×1

methods ×1

oop ×1