我經常遇到兩種類似的方法,當它們足夠相似時,我希望它們有相同的方法。例如: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]))
}
如何保存冗餘?
我經常遇到兩種類似的方法,當它們足夠相似時,我希望它們有相同的方法。例如: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]))
}
如何保存冗餘?
如果這兩個函數實際上是一樣的,那麼你可以做這樣的事情給自己節省一些打字至少:
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]))
# }
另一種選擇,當你在註釋中,將移動公共部分出自己的功能(重構,我想它被稱爲?)並在你的函數內調用它。
'func.matrix'和'func.data.frame'中的一切都一樣嗎?或者只是在功能上的一步?你能否更具體地瞭解你經常遇到的情況? – A5C1D2H2I1M1N2O1R2T1
是的,這兩個功能都是一樣的。 – qed
'func.matrix < - func.data.frame < - function(m){...'? – A5C1D2H2I1M1N2O1R2T1