2013-01-20 11 views
52

(यह एक बहुत ही बुनियादी सवाल होना चाहिए, लेकिन अब तक मैं आर पुस्तिकाओं में एक जवाब खोजने में असफल रहा ...)lapply का मज़ा करने के लिए कई तर्क गुजर (और अन्य * लागू)

जब मैं साथ lapply का उपयोग lapply(input, myfun); की वाक्य रचना - यह आसानी से समझा जा सकता है, और मैं उस तरह पीछे परिभाषित कर सकते हैं: input की

myfun <- function(x) { 
# doing something here with x 
} 

lapply(input, myfun); 

और तत्वों myfun करने के लिए x तर्क के रूप में पारित कर रहे हैं।

लेकिन अगर मुझे myfunc पर कुछ और तर्क पारित करने की आवश्यकता है तो क्या होगा? उदाहरण के लिए, यह ऐसा परिभाषित किया गया है:

myfun <- function(x, arg1) { 
# doing something here with x and arg1 
} 

कैसे मैं (x तर्क के रूप में) दोनों input तत्वों और कुछ अन्य तर्क गुजर के साथ इस समारोह का उपयोग कर सकते हैं?

अग्रिम धन्यवाद!

+0

समाप्त आर सांत्वना इनपुट लाइनों के साथ " , " एक संकेत है कि आपने शायद अतीत में कुछ मैक्रो प्रसंस्करण भाषा का उपयोग किया था। ट्रिपल डॉट्स तर्क का वर्णन "आर के परिचय" दस्तावेज़ के "अपने स्वयं के कार्यों को लिखना" अनुभाग के उपधारा 4 में वर्णित है, तर्कसंगत रूप से पहला "मैनुअल" आपको पढ़ना चाहिए। –

उत्तर

63

यदि आप सहायता पृष्ठ देखते हैं, तो lapply पर तर्कों में से एक रहस्यमय ... है। जब हम सहायता पृष्ठ की तर्क अनुभाग को देखें, हम निम्न पंक्ति को खोजें:

...: optional arguments to ‘FUN’. 

तो तुम सब करने की तो जैसे, एक तर्क के रूप lapply कॉल में अपने अन्य तर्क शामिल है:

lapply(input, myfun, arg1=6) 

और lapply, यह मानते हुए कि arg1 कोई तर्क नहीं है कि यह जानता है कि क्या करना है, स्वचालित रूप से इसे myfun पर भेज देगा। अन्य सभी apply फ़ंक्शन एक ही काम कर सकते हैं।

एक परिशिष्ट: आप ... का उपयोग कर सकते हैं जब आप अपना खुद का कार्य भी लिख रहे हों। उदाहरण के लिए, कहें कि आप किसी फ़ंक्शन को लिखते हैं जो किसी बिंदु पर plot पर कॉल करता है, और आप अपने फ़ंक्शन कॉल से साजिश पैरामीटर को बदलने में सक्षम होना चाहते हैं। आप प्रत्येक पैरामीटर को अपने फ़ंक्शन में तर्क के रूप में शामिल कर सकते हैं, लेकिन यह कष्टप्रद है। इसके बजाय आप ... (अपने फ़ंक्शन दोनों के लिए एक तर्क के रूप में और इसके भीतर साजिश करने के लिए कॉल के रूप में) का उपयोग कर सकते हैं, और आपके पास कोई तर्क नहीं है कि आपका फ़ंक्शन स्वचालित रूप से plot पर पारित हो जाता है।

+0

क्या होगा यदि आपका दूसरा तर्क, उदाहरण के लिए, "arg1" एक सूची है जो "इनपुट" सूची से मेल खाती है? जब मैं _lapply (इनपुट, myfun, arg1 = input2) _ कोशिश करता हूं जहां इनपुट 2 एक सूची है, ऐसा लगता है कि 'इनपुट' के साथ तत्व द्वारा तत्व की बजाय पूरी सूची पूरी तरह से गुजरती है। – Alan

+5

मुझे अभी एक और पोस्ट में एक जवाब मिला है जो काम करता है: मैप्ली (myfun, df $ इनपुट, डीएफ $ इनपुट 2) – Alan

8

एलन ने सुझाव दिया है, समारोह 'mapply' एकाधिक एकाधिक सूचियों या वेक्टर तर्क करने के लिए एक समारोह लागू होता है:

mapply(myfun, arg1, arg2) 

आदमी पृष्ठ देखें: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html

4

आप निम्नलिखित तरीके से यह कर सकते हैं:

myfxn <- function(var1,var2,var3){ 
     var1*var2*var3 

    } 

    lapply(1:3,myfxn,var2=2,var3=100) 

और आपको जवाब मिल जाएगा:

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600

+1

धन्यवाद लेकिन यह उत्तर पहले से ही ऊपर दिया गया है –

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