2010-06-15 12 views
10

मैं अगर वहाँ foldLeft समारोह के एक कार्यान्वयन है जानना चाहते हैं (और foldRight?) आरक्या FoldLeft फ़ंक्शन आर में उपलब्ध है?

में भाषा होने के लिए "के बजाय" कार्यात्मक उन्मुख माना जाता है और इसलिए मुझे लगता है कि कुछ इस तरह होना चाहिए, लेकिन मुझे इसे दस्तावेज़ीकरण में नहीं मिला।

मेरे लिए, foldLeft समारोह एक सूची पर लागू होता है और निम्नलिखित हस्ताक्षर हैं:

f(... (f(f(z, a0), a1) ...), an) if the list is [a0, a1, ..., an]. 

(मैं Scala List API की परिभाषा का उपयोग करें:

foldLeft[B](z : B)(f : (B, A) => B) : B 

यह निम्न परिणाम वापस जाने के लिए माना जाता है)

क्या कोई जानता है कि आर में ऐसा कोई कार्य मौजूद है या नहीं?

उत्तर

12

? कम करें। प्रयोग कम (च, एक्स, init, सही = FALSE, संचित = false)

+0

arf। मुझे पता था कि मैंने इसे कहीं देखा था! क्या आपको पता है कि इष्टतम कार्यों के साथ हैंडलिंग सूची में समर्पित पैकेज है या नहीं? या वे सभी पहले ही मूल पैकेज में लागू किए गए हैं और मुझे उन्हें नहीं मिला? – SRKX

1

आप परिणामों का एक वेक्टर चाहते हैं तो यह काम करेगा:

foldl = function(f, v, x) {w = v; for (i in 1 : length(v)) { x = w[[i]] = f(x, v[[i]]) }; w } 

अब आप

रूप cumsum को फिर से परिभाषित कर सकते हैं
cumsum(v) = foldl(function(x,y) { x+y }, v, 0) 

इसे बेहतर बनाने के लिए आपको Reduce जैसे गुम मूल्यों को संभालना चाहिए।

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