我经常遇到这样的场景:当两个类足够相似时,我希望它们对两个类都具有相同的方法。例如:

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]))
# }

就像您在评论中提到的那样,另一种选择是将公用部分移到其自己的函数中(重构,我想它叫做“?”),然后在您的函数中调用它。

关于r - R中多个类的相同方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19386098/

10-12 20:52