您不能通过对象名称(至少以自然方式)更改函数的行为。 但是你可以基于对象类来指定函数行为。 这是一个称为函数重载的概念。 我认为这接近你想要做的事情。
在R中,可以通过泛型函数实现此功能(请参阅Hadley's Advanced R)。
这是一个简单的例子。 MuFunc
的行为会根据传递的对象所属的类别进行更改。 它也使用递归结构,以便函数调用另一个函数,如您的示例中所示。
MyFunc <- function(x, ...) {
UseMethod("MyFunc")
}
MyFunc.default <- function(x, ...) {
print("running MyFunc.default")
class(x) <- c("A", class(x))
MyFunc(x)
}
MyFunc.A <- function(x, ...) {
print("running MyFunc.A")
class(x) <- c("B", class(x))
MyFunc(x)
}
MyFunc.B <- function(x, ...) {
print("running MyFunc.B")
class(x) <- c("C", class(x))
MyFunc(x)
}
MyFunc.C <- function(x, ...) {
print("running MyFunc.C (Terminal Function)")
class(x) <- c("D", class(x))
}
MyFunc(1)
##[1] "running MyFunc.default"
##[1] "running MyFunc.A"
##[1] "running MyFunc.B"
##[1] "running MyFunc.C (Terminal Function)"
x <- 1
class(x) <- "B"
MyFunc(x)
##[1] "running MyFunc.B"
##[1] "running MyFunc.C (Terminal Function)"
也许你正在寻找[这](https://github.com/rbertolusso/intubate) – user2100721
您是否在寻找一种'make'(http://matt.might.net/articles /介绍到化妆/)? –
你能否提供一个更具体的例子来说明如何识别不同的顺序对象?除了KotaMori用“class”es的例子之外,你还可以根据某些“attr”ibute或参数的可能值(通过例如'match.arg')使用一个简单的'switch'? –