2012-07-19 14 views
38

मैंने आर में प्रतिस्थापन कार्यों के बारे में जानने के संदर्भ की खोज की, लेकिन मुझे अभी तक कोई नहीं मिला है। मैं आर में प्रतिस्थापन कार्यों मैं नीचे दिए गए कोड है की अवधारणा को समझने की कोशिश कर रहा हूँ लेकिन मैं यह समझ में नहीं आता:आर में प्रतिस्थापन कार्य क्या हैं?

"cutoff<-" <- function(x, value){ 
x[x > value] <- Inf 
x 
} 

और फिर हम साथ कटऑफ फोन:

cutoff(x) <- 65 

सका कोई भी बताता है कि आर में प्रतिस्थापन कार्य क्या है?

+5

यह एसओ –

+2

के लिए एक पूरी तरह से स्वीकार्य क्यू है ['स्तर <-' (यह क्या जादू है?] (Http://stackoverflow.com/questions/10449366/levels-what-sorcery-is-this) –

+0

देखें ** विस्तारित आर.- जॉन चेम्बर्स (2016) **: * पृष्ठ 73 से 79 अध्याय 5 * –

उत्तर

42

जब आप फोन

cutoff(x) <- 65 

आपको बुला रहा

x <- "cutoff<-"(x = x, value = 65) 

समारोह के नाम के रूप में यह एक वाक्य रचना वैध लेकिन गैर मानक नाम है उद्धृत किया जाना है और पार्सर होगा प्रभाव में हैं ऑपरेटर के रूप में ऑपरेटर के रूप में <- की व्याख्या करें यदि इसे उद्धृत नहीं किया गया था।

"cutoff<-"() किसी भी अन्य फ़ंक्शन की तरह है (हालांकि एक अजीब नाम के साथ); यह value के आधार पर अपने इनपुट तर्क में परिवर्तन करता है (इस मामले में यह x65 से Inf (अनंत) से अधिक मूल्य निर्धारित कर रहा है)।

जादू वास्तव में किया जा रहा है जब आप इस

cutoff(x) <- 65 

की तरह समारोह कहते हैं क्योंकि आर कि पार्स करने और विभिन्न बिट्स बाहर खींच वास्तविक कॉल ऊपर दिखाए बनाने के लिए किया जाता है।

अधिक सामान्य रूप से हम इसलिए यह कहता है

FUN(obj) <- value 

आर समारोह "FUN<-"() पाता है और "FUN<-"() का परिणाम के लिए "FUN<-"()और व्यवस्था में obj और value गुजर obj वापस करने के लिए आवंटित करने के लिए द्वारा कॉल सेट है, :

obj <- "FUN<-"(obj, value) 

इसके लिए एक उपयोगी संदर्भ गठन R Language Definition Section 3.4.4: Subset assignment है; चर्चा थोड़ा विचित्र है, लेकिन ऐसा लगता है कि यह सबसे आधिकारिक संदर्भ है (आर एफएक्यू (आर और एस प्लस के बीच अंतर) में पारित होने के संदर्भ में प्रतिस्थापन कार्यों का उल्लेख किया गया है, और आर भाषा संदर्भ (विभिन्न तकनीकी मुद्दों) में, लेकिन मुझे आधिकारिक दस्तावेज में कोई और चर्चा नहीं मिली है)।

+0

बहुत उपयोगी उत्तर ... बहुत बहुत धन्यवाद। – Sam

9

गेविन प्रतिस्थापन समारोह की व्याख्या की उत्कृष्ट चर्चा प्रदान करता है। मैं एक संदर्भ प्रदान करना चाहता था क्योंकि आपने यह भी पूछा था: R Language Definition Section 3.4.4: Subset assignment

+0

मैं इसे ब्रायन की सराहना करता हूं। – Sam

+5

उपयोगी, लेकिन लिंक-केवल उत्तर ... मैं इसे जोड़ने के लिए @ गेविन सिम्पसन के जवाब को संपादित कर रहा हूं ... –

2

याद रखें, आर सब कुछ ऑपरेशन एक फ़ंक्शन कॉल (इसलिए असाइनमेंट ऑपरेशंस) है और जो कुछ भी मौजूद है वह एक वस्तु है। रिप्लेसमेंट कार्यों में कार्य रूप में यदि वे इस तरह के

colnames(d) <- c("Input", "Output") 

में वे अपने नाम के अंत में पहचानकर्ता <- है और तर्क वस्तु का एक संशोधित प्रतिलिपि वापसी के रूप में जगह में अपने तर्क को संशोधित (गैर आदिम प्रतिस्थापन कार्यों) या एक ही वस्तु (आदिम प्रतिस्थापन कार्यों)

आर प्रॉम्प्ट पर, निम्नलिखित कार्य नहीं करेगा:

> `second` <- function(x, value) { 
+ x[2] <- value 
+ x 
+ } 
> x <- 1:10 
> x 
[1] 1 2 3 4 5 6 7 8 9 10 
> second(x) <- 9 
Error in second(x) <- 9: couldn't find function "second<-" 

आप देख सकते हैं, आर 012,373,286 के लिए पर्यावरण खोज कर रहा है नहींलेकिन second<- के लिए।

> `second<-` <- function(x, value) { 
+ x[2] <- value 
+ x 
+ } 

अब, वेक्टर के दूसरे स्थान पर काम काम करता है::

> second(x) <- 9 
> x 
[1] 1 9 3 4 5 6 7 8 9 10 

मैं भी सूचीबद्ध करने के लिए एक सरल पटकथा लिखी तो एक ही बात करते हैं, लेकिन इसके बजाय इस तरह के एक समारोह पहचानकर्ता का उपयोग करके की सुविधा देता है आर बेस पैकेज में सभी प्रतिस्थापन कार्यों, find it here

+0

सभी प्रतिस्थापन कार्यों को खींचने के लिए स्क्रिप्ट के संबंध में आपके ब्लॉग पर एक टिप्पणी लिखा: "क्या आप उन प्रतिस्थापन कार्यों को याद नहीं कर रहे हैं, जिनके पास "' <-' "के बीच में? जैसे कि 'विभाजित <-। डिफ़ॉल्ट' और 'विभाजन <-। data.frame'?" –

+0

@ मैनुअल मैं जांच रहा हूं:,210 '> विभाजन <- data.frame Fehler:। Objekt '.data.frame' nicht gefunden > विभाजन <- डिफ़ॉल्ट Fehler:। Objekt '.DEFAULT' nicht gefunden >' – TMOTTM

+0

@ManuelS हैडली नहीं लिखा था उन्नत आर में ऐसे नामित कार्यों के बारे में कुछ भी। क्या आपके पास उल्लेख किए गए कार्यों का संदर्भ है? – TMOTTM

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