2009-07-31 6 views
5

में फ़ंक्शन तर्कों का उपयोग करना मैं एक ऐसा फ़ंक्शन लिख रहा हूं जो दो चर लेता है और अलग-अलग एक-तरफा सूत्र के रूप में व्यक्त नियंत्रणों के सेट पर अलग-अलग प्रतिक्रिया देता है। अभी मैं प्रतिगमन में से एक के लिए सूत्र बनाने के लिए निम्नलिखित का उपयोग कर रहा है, लेकिन यह थोड़ा काट दिया-अप का मानना ​​है:update.formula

foo <- function(x, y, controls) { 
    cl <- match.call() 
    xn <- cl[["x"]] 
    xf <- as.formula(paste(xn, deparse(controls))) 
} 

मैं इस का उपयोग कर update.formula() करने के लिए पसंद करते हैं, लेकिन निश्चित रूप update.formula(controls, x ~ .) और update.formula(controls, as.name(x) ~ .) की काम नहीं करते। मुझे क्या करना चाहिए?

उत्तर

5

यहाँ एक दृष्टिकोण है:

right <- ~ a + b + c 
left <- ~ y 
left_2 <- substitute(left ~ ., list(left = left[[2]])) 

update(right, left_2) 

लेकिन मुझे लगता है कि आप या तो पेस्ट पाठ स्ट्रिंग्स के लिए एक साथ करना होगा, या विकल्प का उपयोग। मेरे सबसे अच्छे ज्ञान के लिए, दो तरफा सूत्रों (या समान समकक्ष) से ​​एक दो तरफा सूत्र बनाने के लिए कोई फ़ंक्शन नहीं हैं।

+0

मुझे आश्चर्य है कि क्या आठ साल बाद बेहतर जवाब है, सामान्य रूप से quosures या rlang पैकेज के आधार पर? – rcorty

1

मुझे update.formula() के बारे में निश्चित नहीं है, लेकिन मैंने पाठ को पेस्ट करने और सफलता के साथ अतीत में इसे as.formula के माध्यम से परिवर्तित करने के दृष्टिकोण का उपयोग किया है। help(update.formula) का मेरा पठन मुझे नहीं लगता है कि आप बाएं हाथ की तरफ से अपनी इच्छानुसार विकल्प बदल सकते हैं।

अंत में, प्रेषण तंत्र पर भरोसा करें। यदि आप ऑब्जेक्ट टाइप प्रकार का है, तो बस update पर कॉल करें जिसे स्पष्ट update.formula पर प्राथमिकता दी जाती है।