1
R中的所有連接函數都可以重寫爲遞歸函數。例如,我可以用c
二元運算符,我可以定義一個新的concat
功能R中用戶定義類的遞歸連接方法?
concat <- function(...) {
Reduce(c, ...)
}
和concat
會爲c
實際上R基本職能發揮作用。
R語法上使用了許多這樣的函數,例如向量和列表的c
,陣列,數據框架和矩陣的cbind
。在定義新的對象類時,創建一個方法可以使用一個以...
作爲參數的函數進行組合。
我知道R可以匹配方法的對象,當他們在參數列表中的第一個對象,但如果我這樣定義
concat <- function(...) {
UseMethod('concat')
}
concat.numeric <- function(...) {
c(...)
}
concat.character <- function(...) {
c(...)
}
myCon <- function(charPart, numPart) {
out <- list(charPart=charPart, numPart=numPart)
class(out) <- "myClass"
out
}
concat.myClass <- function(...) {
myCon(sapply(..., `[[`, 'charPart'), sapply(..., `[[`, 'numPart'))
}
> concat(4, 6, 'a')
"4" "6" "a"
> myObj1 <- myCon('a', 1)
> myObj2 <- myCon('b', 2)
> concat(myObj1, myObj2)
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'p' of mode 'function' was not found
在什麼點的方法確實[R標識類型的供給參數concat
?我如何說服R嘗試將參數投射到concat
直到我的特定對象類?
哎呀!感謝您的調試。我想那就是我想要做的沒有錯。 – AdamO
沒問題。關於你在做什麼......沒關係,只要你沒有設計大量的數據處理代碼,因爲R沒有被編譯,並且深度遞歸函數(例如斐波那契,質數查找器,牛頓方法)更好不用這種方式編程...否則罰款。 –