2013-10-15 2 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' –

Смежные вопросы