您不能通過對象名稱(至少以自然方式)更改函數的行爲。 但是你可以基於對象類來指定函數行爲。 這是一個稱爲函數重載的概念。 我認爲這接近你想要做的事情。
在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'? –