发货前进行类型转换

时间:2016-06-17 21:00:03

标签: r amazon-s3 type-conversion method-dispatch

我正在定义一个通用函数

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?

非常感谢您的帮助!

最佳,

马丁

1 个答案:

答案 0 :(得分:1)

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

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