2009-11-16 18 views
11

मैं एक आर समारोह लिख रहा हूं, और मैं यह सुनिश्चित करना चाहता हूं कि मेरे आर फ़ंक्शन का तर्क एक निश्चित वर्ग (उदाहरण के लिए, "मैट्रिक्स") का है।आर कार्यों के लिए तर्क प्रकार को परिभाषित करने के लिए कैसे?

ऐसा करने का सबसे अच्छा तरीका क्या है?

मैं एक समारोह "foo" जो एक मैट्रिक्स के व्युत्क्रम की गणना करता है कहते हैं:

foo <- function(x) 
{ 
    # I want to make sure x is of type "matrix" 
    solve(x) 
} 

मैं कैसे कह सकते हैं - के रूप में आप सी में हो सकता है - function(matrix x) निरूपित करने के लिए है कि "x प्रकार matrix का होना चाहिए, और यदि यह नहीं है, तो एक त्रुटि वापस करें "?

उत्तर

13

आप देख सकते हैं या तो यह है कि यह is.matrix साथ वरना as.matrix साथ परिवर्तित करने के बाद पैरामीटर पारित हो जाता है एक मैट्रिक्स है:

foo <- function(x) 
{ 
    if(!is.matrix(x)) stop("x must be a matrix") 
    # I want to make sure x is of type "matrix" 
    solve(x) 
} 
+0

ठीक है, ठंडा। मैं बस "is.matrix" के लिए पूरी तरह से अनजान था। धन्यवाद! – poundifdef

+0

अनिवार्य रूप से प्रत्येक डेटाटाइप में * * * * * * फ़ंक्शन के रूप में होता है। – Shane

3

बस संपूर्णता के लिए: के अलावा

is.matrix(foo) 

आप

class(foo) == "matrix" 

जो गैर-मानक के लिए भी काम करता है जिसमेंनहीं हैकार्यों।

+5

यहां सावधान रहना होगा, क्योंकि आर में ऑब्जेक्ट्स में एक से अधिक कक्षाएं हो सकती हैं। इसलिए कोड को% वर्ग (foo) में "मैट्रिक्स"% पढ़ना चाहिए। –

+0

सहमत, धन्यवाद! –

+3

या 'विरासत' का उपयोग करें – hadley

संबंधित मुद्दे

 संबंधित मुद्दे