我最近(非常)开始研究在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”的通用函数。在某些情况下,功能可能非常短,并且具有附加功能似乎不是最佳实践。在这种情况下通常会做什么?
答案 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)