आर

2012-03-14 5 views
8

में मॉडल से फॉर्मूला निकालें मैं मॉडल बनाने के लिए उपयोग किए गए सूत्र को निकालने की आवश्यकता वाले कई मॉडल प्रकारों के लिए एक फ़ंक्शन बना रहा हूं। क्या ऐसा करने का कोई लचीला तरीका है? उदाहरण के लिए:आर

x <- rnorm(10) 
y <- rnorm(10) 
z <- rnorm(10) 
equation <- z ~ x + y 
model <- lm(equation) 

मुझे जो करना है वह मॉडल को पारित करने के बाद फॉर्मूला ऑब्जेक्ट "समीकरण" निकालना है।

उत्तर

12

आप मिल क्या आप द्वारा चाहता था सकता है:

model$call 
# lm(formula = formula) 

और अगर आप क्या मैं पता चला तो देखना चाहते हैं का उपयोग करें:

str(model) 

जब से तुम 'सूत्र' (के बुरे विकल्प पारित कर दिया रास्ते से नाम) कॉलिंग पर्यावरण से आपको तब पारित वस्तु से निकालने की आवश्यकता हो सकती है:

eval(model$call[[2]]) 
# z ~ x + y 

@JPM एसी ने एक और कॉम्पैक्ट विधि की पेशकश की: formula(model)formula.lm फ़ंक्शन द्वारा उपयोग की जाने वाली तंत्र को देखने के लायक भी है। formula नामक फ़ंक्शन सामान्य है और आप S3 विधियों को परिभाषित करने के लिए methods(formula) का उपयोग करते हैं। तो यह "$" उपयोग कर रहा है बल्कि कॉल से खींच से सूची आइटम "सूत्र" का नाम निकालने के लिए

> getAnywhere(formula.lm) 
A single object matching ‘formula.lm’ was found 
It was found in the following places 
    registered S3 method for formula from namespace stats 
    namespace:stats 
with value 

function (x, ...) 
{ 
    form <- x$formula 
    if (!is.null(form)) { 
     form <- formula(x$terms) 
     environment(form) <- environment(x$formula) 
     form 
    } 
    else formula(x$terms) 
} 
<bytecode: 0x36ff26158> 
<environment: namespace:stats> 

: चूंकि formula.lm विधि अपने अंत में एक तारक है, तो आप `getAnywhere में लपेट की जरूरत है । यदि $ फॉर्मूला आइटम गुम है (जो आपके मामले में है) तो यह formula(x$terms) के साथ बदल देता है जो मुझे संदेह है कि formula.default पर कॉल कर रहा है और उस फ़ंक्शन के ऑपरेशन को देखकर केवल ऑब्जेक्ट के वातावरण को समायोजित किया जा रहा है।

+0

जवाब देने के लिए धन्यवाद - मैं वास्तव में फ़ॉर्मूला ऑब्जेक्ट "फॉर्मूला" कैसे एक्सेस करूं? अगर मैं जानकारी का प्रयास करता हूं <- मॉडल $ कॉल, जानकारी $ फॉर्मूला सिर्फ मुझे एक प्रतीक वस्तु "फॉर्मूला" देता है। – mike

+0

मैं 'मॉडल $ कॉल [[2]] 'के बजाय' as.list (मॉडल $ कॉल) $ फॉर्मूला' का सुझाव दूंगा। – flodel

+0

@ माइक: मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। आप ही वह व्यक्ति हैं जिसने अपना फॉर्मूला, "फॉर्मूला" कॉल करने का निर्णय लिया है, और उसके बाद इसे 'एलएम' नामित तर्क के रूप में पारित किया है। 'भाग्य :: भाग्य (" कुत्ता ") 'निश्चित रूप से यहां लागू होता है। –

3

के रूप में बताया गया है, model$call आप कॉल कि lm वस्तु बनाया मिल जाएगा, लेकिन अगर है कि कॉल मॉडल सूत्र के रूप में एक वस्तु ही होता है, आप वस्तु का नाम, न सूत्र मिलता है।

मूल्यांकित वस्तु, यानी फॉर्मूला स्वयं, model$terms में उपयोग किया जा सकता है (इसके साथ सहायक जानकारी के समूह के साथ इसका इलाज किया जा सकता है)। यह कॉल के ब्योरे पर ध्यान दिए बिना lm पर काम करना चाहिए।