2013-01-12 11 views
16

क्या कोई मुझे बता सकता है कि आर कोड की यह एक पंक्ति कैसे काम करती है?रीसाइक्लिंग और असाइनमेंट फ़ंक्शन (`विभाजन <-`)

split(dat, f) <- lapply(split(dat, f), max) 

मैंने सोचा कि यह सिर्फ एक रीसाइक्लिंग नियम है लेकिन वास्तव में मैं इसे समझ नहीं सकता।

डेटा का उदाहरण:

dat <- c(1, 2, 3, 100, 200, 300) 
f <- as.factor(c("a", "a", "b", "a", "b", "b")) 
split(dat, f) <- lapply(split(dat, f), max) 
dat 
[1] 100 100 300 100 300 300 

कोड मैं क्या (समूह द्वारा अधिकतम आवंटित) करना चाहते हैं, लेकिन सवाल यह कैसे किया जाता है?

+5

देखो के परिणाम के साथ split<-.default फोन < -.default \ ''। –

+2

आर मैनुअल – mdsumner

उत्तर

9

विभाजन वेक्टर से मूल्य dat[c(1,2,4)] और dat[c(3,5,6)] देता है।

असाइनमेंट dat[c(1,2,4)] <- 100 ; dat[c(3,5,6)] <- 300 के बराबर है और यह वह जगह है जहां रीसाइक्लिंग होता है।

संपादित

क्या होता है, और के रूप में क्यों एक वेक्टर काम परिणाम, भाषा परिभाषा पुस्तिका के पृष्ठ 21 (http://cran.r-project.org/doc/manuals/R- देखना lang.pdf)। कॉल:

‘*tmp*‘ <- def 
def <- "split<-"(‘*tmp*‘, f, value=Z) 
rm(‘*tmp*‘) 

ध्यान दें कि split<-.default रिटर्न संशोधित वेक्टर:

split(def, f) <- Z 

रूप में व्याख्या की है। टिप्पणी करने के लिए

+0

से एक और प्यारा कबूम पल धन्यवाद! मुझे यह जवाब पसंद है। मायाबे आपको समझाने की जरूरत है कि हमें वेक्टर क्यों मिलता है न कि परिणाम के रूप में। – agstudy

5

धन्यवाद, इस सवाल का जवाब, बस अपने व्यवहार की व्याख्या करने के split<-.default

में है यहाँ मैं प्रश्न में मेरी कॉल `\` विभाजित पर

`split<-.default` <- function(dat, f,value = lapply(split(dat, f), max)) 
{ 
    ix <- split(seq_along(dat), f, drop = drop, ...) ## the call of split here!! 
    n <- length(value) 
    j <- 0 
    for (i in ix) { 
     j <- j %% n + 1 
     x[i] <- value[[j]] ## here we assign the result of the first split 
    } 
    x 
} 
संबंधित मुद्दे