आर

2013-10-15 2 views
5

में कई कक्षाओं के लिए एक ही विधि मैं अक्सर उन परिदृश्यों का सामना करता हूं जहां मैं दो वर्गों के लिए एक ही विधि रखना चाहता हूं, जब वे पर्याप्त होते हैं। उदाहरण के लिए:आर

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 <- फ़ंक्शन (एम) {...'? – 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

वह संस्करण जो काम नहीं करेगा वह एक <- b = 3' है –