Problemas que pasan argumentos con callNextMethod () en R

Mi pregunta

Por que escallNextMethod() no pasa argumentos como se esperaba al siguiente método?

Situación

Di que tengo dos clases jerárquicasfoo ybar (bar es una subclase defoo) para el cual tengo un métodofoobar que puede despachar para ambas clases (es decir, tiene métodos para ambas clases).

Además, el método para la (sub) clasebar llama al método parafoo después de algunos cálculos concallNextMethod().

mbos métodos tienen el mismo argumento adicional (con el valor predeterminado) que se debe pasar al método parafoo, donde solo es relevante.

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()
})

Descripción del problema
Los argumentos no se pasan como se esperaba, pero los valores predeterminados se toman de la definición del método. Específicamente, en el primer método, el argumento es el especificado en la llamada TRUE), sin embargo, cambia aFALSE en el siguiente método.

o1 <- new("bar", x = 4)

foobar(o1, another.argument = TRUE)

d

[1] "in bar-method: TRUE"
[1] "in foo-method: FALSE"
[1] 4

Quiero elanother.argument para pasar al siguiente método para que seaTRUE en la llamada a lafoo método, también.

Desde?callNextMethod Entiendo que debería funcionar como se esperaba (es decir, el argumento nombrado se pasa como está en la llamada):

Para un argumento formal, digamos x, que aparece en la llamada original, hay un argumento correspondiente en la siguiente llamada al método equivalente a x = x. En efecto, esto significa que el siguiente método ve los mismos argumentos reales, pero los argumentos se evalúan solo una vez.

Mi segunda pregunta: ¿Cómo puedo pasar otro argumento al siguiente método? (Realmente me gustaría mantener los argumentos predeterminados en ambos métodos)

Respuestas a la pregunta(1)

Su respuesta a la pregunta