派发前的类型转换

Type conversion before dispatch takes place

我正在定义一个泛型函数

genfun <- function(x, ...)
    UseMethod("genfun")

应该有两个实例: genfun.default(如果 x 是矩阵) genfun.formula(如果 x 是一个公式)

这很好用,但现在我想在调度发生之前得到它,如果 x 是一个字符串,它就被强制为一个公式。

很遗憾,以下内容不起作用

genfun <- function(x, ...) {
    if (is.character(x)) x <- as.formula(x)
    UseMethod("rlasso")
}

有没有办法在不定义另一个实例的情况下处理这个问题 genfun.character?

非常感谢您的提前帮助!

最佳,

马丁

我在想这样的事情(尽管正确的方法是定义另一种方法)。

genfun <- function(x, ...)
  UseMethod('genfun')

genfun.default <- function(x, ...) {
  if (is.character(x)) {
    x <- as.formula(x)
    return(genfun(x))
  }
  dim(x)
}

genfun.formula <- function(x, ...) {
  message('using formula method')
  ## do something
}


genfun(mtcars)
# [1] 32 11

genfun(y ~ x)
# using formula method

genfun('y ~ x')
# using formula method