多个S3方法之间的常见操作

时间:2016-02-09 03:29:05

标签: r methods

我最近(非常)开始研究在R中创建S3函数。我在一个函数中工作,我预见在不同方法之间有共同的操作。不知道应该怎么做。例如:

myfun <- function (x) {
UseMethod("myfun")
}

myfun.numeric <- function(x) {
  a<-x+5
  b<-a^2
  c<-b+4
  d<-c-3
  d
}

myfun.character <- function(x) {
  a<-as.numeric(x)+9
  b<-a^2
  c<-b+4
  d<-c-3
  d
}

myfun("3")
myfun(3)

此时的功能不会太长。我想在技术上我可以有一个执行由字母“a”表示的部分的函数,然后有一个执行步骤“b”,“c”和“d”的通用函数。在某些情况下,功能可能非常短,并且具有附加功能似乎不是最佳实践。在这种情况下通常会做什么?

1 个答案:

答案 0 :(得分:1)

这有两种可能性。使用默认方法存在一些危险,因为它可能会在意外情况下被调用,因此常见函数似乎更可靠,但在您显示的示例中都可以使用。

1)默认方法将公共代码放在默认方法中并使用NextMethod()

myfun <- function (x) UseMethod("myfun")

myfun.numeric <- function(x) {
  x<-x+5
  NextMethod()
}

myfun.character <- function(x) {
  x <-as.numeric(x)+9
  NextMethod()
}

myfun.default <- function(x) {
  b<-x^2
  c<-b+4
  d<-c-3
  d
}

myfun("3")
myfun(3)

2)常用功能或者,只需将公共代码放在一个名为common的单独函数中,然后调用它。

myfun <- function (x) UseMethod("myfun")

myfun.numeric <- function(x) {
  y <-x+5
  common(y)
}

myfun.character <- function(x) {
  y <-as.numeric(x)+9
  common(y)
}

common <- function(x) {
  b<-x^2
  c<-b+4
  d<-c-3
  d
}

myfun("3")
myfun(3)