2013-10-31 6 views
5

लिखने के लिए फ़ंक्शन कहा जाता है, मैं रिकर्सिव लागू करने के लिए फ़ंक्शन के भीतर वर्तमान फ़ंक्शन कैसे प्राप्त कर सकता हूं?वर्तमान में अज्ञात रिकर्सिव फ़ंक्शन

myfun <- function(x) { 
    if(is.list(x)){ 
    lapply(x, myfun) 
    } else { 
    length(x) 
    } 
} 

मैं इसे गुमनाम बजाय, हालांकि मैं नहीं जानता कि कैसे lapply बताने के लिए वर्तमान समारोह का उपयोग करने के जब यह कोई नाम नहीं है बनाने के लिए चाहते हैं: यहाँ एक छोटी सी उदाहरण है। मैं Recall कोशिश की, लेकिन वह काम नहीं करता:

(function(x) { 
    if(is.list(x)){ 
    lapply(x, Recall) 
    } else { 
    length(x) 
    } 
})(cars) 

इसके अलावा match.call()[[1]] गुमनाम कार्यों के लिए मदद नहीं करता है।

उत्तर

4

यह एक सूची के वर्ग रिकर्सिवली गणना करने के लिए उदाहरण के लिए sys.function(0) है,:

(function(x) { 
    if(length(x)>2){ 
    lapply(x,sys.function(0)) 
    } else { 
    x^2 
    } 
})(list(1,2,3)) 

[[1]] 
[1] 1 

[[2]] 
[1] 4 

[[3]] 
[1] 9 
+0

अच्छा है, लेकिन तुम क्यों 'lapply()' 'को यह एक्स [-1]' बजाय 'x' करना ? –

+0

@ जोशो'ब्रायन अच्छा पकड़। मैंने इसे 'sys.function (0) (x [-1]) जैसे कुछ' lapply' के साथ परीक्षण किया ... – agstudy

1

आप के लिए क्या देख रहे हैं मुझे लगता है कि है, sys.function:

> (function() print(sys.function(1)))() 
function() print(sys.function(1)) 

Recall वास्तव में कहते हैं:

एक और तरीका है गुमनाम पुनरावर्ती कार्यों लिखने के लिए local

local(myfun <- function(...) { ... myfun(...) ... }) 

और यह बाहर से परिभाषित नहीं है:

विचार है कि आप स्थानीय रूप से नाम निर्धारित है।

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