2013-10-15 112 views
5

我經常遇到兩種類似的方法,當它們足夠相似時,我希望它們有相同的方法。例如:R中多個類的相同方法

func.matrix = function(m) { 
stopifnot(ncol(m) == 2) 
c(mean(m[, 1]), sd(m[, 2])) 
} 

func.data.frame = function(m) { 
stopifnot(ncol(m) == 2) 
c(mean(m[, 1]), sd(m[, 2])) 
} 

如何保存冗餘?

+1

'func.matrix'和'func.data.frame'中的一切都一樣嗎?或者只是在功能上的一步?你能否更具體地瞭解你經常遇到的情況? – A5C1D2H2I1M1N2O1R2T1

+0

是的,這兩個功能都是一樣的。 – qed

+1

'func.matrix < - func.data.frame < - function(m){...'? – A5C1D2H2I1M1N2O1R2T1

回答

6

如果這兩個函數實際上是一樣的,那麼你可以做這樣的事情給自己節省一些打字至少:

func.matrix <- func.data.frame <- function(m) { 
    stopifnot(ncol(m) == 2) 
    c(mean(m[, 1]), sd(m[, 2])) 
} 
func.matrix 
# function(m) { 
# stopifnot(ncol(m) == 2) 
# c(mean(m[, 1]), sd(m[, 2])) 
# } 
func.data.frame 
# function(m) { 
# stopifnot(ncol(m) == 2) 
# c(mean(m[, 1]), sd(m[, 2])) 
# } 

另一種選擇,當你在註釋中,將移動公共部分出自己的功能(重構,我想它被稱爲?)並在你的函數內調用它。

+1

+1。另外,這是'='和'<-' –

+1

之間區別的一個很好的例子。我使用=,在這種情況下,它也可以。 – qed

+1

不適用的版本是'a < - b = 3' –