R中多个类的方法相同

qed*_*qed 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]))
}
Run Code Online (Sandbox Code Playgroud)

如何保存冗余?

A5C*_*2T1 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]))
# }
Run Code Online (Sandbox Code Playgroud)

正如你在评论中提到的那样,另一种选择是将公共部分移动到它自己的函数中(重构,我猜它被称为?)并在你的函数中调用它.

  • +1。另外,这是`=`和`&lt;-`之间区别的一个很好的例子 (2认同)