2011-02-07 16 views
12

क्या आर में फ़ंक्शन संरचना की तरह कुछ है?आर (और उच्च स्तरीय कार्यों) में फ़ंक्शन संरचना

मुझे लगता है कि हैकेल में यह कुछ है ("।)" और एग्डा में यह अंगूठी ऑपरेटर है।

इसके अलावा, मुझे आर में उच्च स्तरीय कार्यात्मक प्रोग्रामिंग पर लिट जानकारी मिलती है, मुझे फ़ंक्शंस "कम करें", "मानचित्र", "फ़िल्टर" ... और अधिक हैं? कोई संकेतक?

+1

कार्यात्मक पर कुछ वास्तव में उपयोगी संकेत प्राप्त करने के लिए प्रोग्रामिंग, पिछले प्रश्न के उत्तर पर एक नज़र डालें: http://stackoverflow.com/questions/4874867/learning-functional-programming-with-r/4887648#4887648 – Andrie

उत्तर

8

आप इस तरह संयोजन समारोह कर सकते हैं:

composite<-function(f,g) function(...) f(g(...)) 

f<-function(x) x+1; 
g<-function(x) x*2; 
composite(f,g)(7) 
composite(g,f)(7) 

या इस के ऑपरेटर हैं।

दूसरे बिंदु के बारे में, ऐसे बहुत सारे हैं; मुझे लगता है कि सबसे अधिक उपयोग * लागू परिवार हैं (sapply, mapply, tapply, lapply, लागू ...)।

+0

हाय। जवाब के लिए धन्यवाद। एक और सवाल है कि मुझे बग्स है: मैं "फ़ंक्शन" के लिए शॉर्टकट के रूप में "एफ" का उपयोग कैसे कर सकता हूं? तो फ़ंक्शन परिभाषाओं के लिए "g <- f (x) x * x" की तरह। – mrsteve

+0

@mrsteve: नहीं (बहुत हैकिंग दूर है)। वैसे भी मुझे एक बहुत बुरा विचार लगता है। –

+0

@mrsteve दुर्भाग्य से नहीं - यह आर और ***, 8 अक्षरों में एकमात्र कीवर्ड है। दूसरी ओर, लैम्ब्डा "सामान्य लोगों" को पीछे हटाना होगा और एफ भ्रमित हो जाएगा ... – mbq

16

functional पैकेज एक Compose कार्यात्मक जो कार्यों के किसी भी संख्या को सामान्यीकृत है:

set.seed(123) 
x <- matrix(runif(100), 10, 10) 
mean(rowSums(scale(x))) 
# [1] 5.486063e-18 

library(functional) 
Compose(scale, rowSums, mean)(x) 
# [1] 5.486063e-18 

(ध्यान दें कि कार्यों बाएं से दाएं लागू होते हैं।)

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