【问题标题】:Type conversion before dispatch takes place分派前的类型转换
【发布时间】:2016-10-19 19:22:28
【问题描述】:

我正在定义一个通用函数

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?

非常感谢您提前提供的帮助!

最好的,

马丁

【问题讨论】:

  • 如果你没有class(x)的方法,则使用默认方法,所以你可以将该行添加到我认为的默认方法中
  • 感谢您的回复。但是默认方法只处理矩阵并且是错误的。我需要以某种方式使用公式方法,并且不想为字符添加另一种方法...

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2010-11-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多