2011-10-21 3 views
8

मैं कल एक बड़ा प्रोग्रामिंग प्रतियोगिता में भाग लेने हूँ मैं कहाँ का उपयोग आरलघुरूप और एक प्रोग्रामिंग प्रतियोगिता

समय मुख्य कारक (7 कोडिंग की समस्याओं के लिए केवल 2 घंटे) है के लिए तैयारी में कार्य करता है। समस्याएं बहुत गणित संबंधित हैं।

  1. जब मैं कोई फ़ंक्शन परिभाषित करता हूं तो मैं "फ़ंक्शन" के बजाय "f" लिखना चाहता हूं। यह किया जा सकता है और मेरे पास ऐसा करने का कोड था, लेकिन मैंने इसे खो दिया और इसे नहीं मिला।

  2. मुझे डिग्री इनपुट के लिए पाप() फ़ंक्शन कहां मिलते हैं, रेडियन नहीं?

  3. (वैकल्पिक) क्या कोई एल्गोरिदम विशिष्ट कार्य दृश्य या पुस्तकालय है।

  4. प्रोग्रामिंग प्रतियोगिता के लिए कोई सुझाव? http://pastebin.com/h5xDLhvg

    ======== संपादित करें:

मैं प्रतियोगिता के लिए निम्नलिखित चीट शीट तैयार ==========

तो मैं अंत में मेरे सबक सीखे जाने के लिए समय है।

प्रोग्रामिंग प्रतियोगिता बहुत मजेदार थी, लेकिन दुर्भाग्य से मैंने बहुत अच्छा स्कोर नहीं किया। मैं शीर्ष 50% में था, लेकिन मेरा लक्ष्य शीर्ष 25% होना था।

मुख्य समस्या यह थी कि कार्यक्रम में बहुत कम समय था, कुल मिलाकर केवल 2 घंटे। लेकिन मुझे समस्या का विवरण पढ़ना पड़ा और मुझे परिणामों को वेब फॉर्म आदि में पेस्ट करने के लिए कुछ समय चाहिए, इसलिए यह 90 मिनट प्रोग्रामिंग की तरह था।

उम्मीद है कि दिसम्बर में अगले प्रतियोगिता में 3-4 घंटे की तरह विस्तारित समय होगा। आयोजकों ने कहा कि शायद यह मामला होगा।

इसके अलावा, प्रतियोगिता में कोई इंटरनेट एक्सेस नहीं थी, और मेरा मोबाइल रिसेप्शन वास्तव में काम नहीं कर रहा था।

मेरे लिए मुख्य सबक यह है कि आपको एक वास्तविक मौका पाने के लिए दैनिक भाषा का उपयोग करना होगा। विशेष रूप से, यदि कार्यक्रम के लिए केवल 9 0 मिनट का समय है। चूंकि मैं अपने दैनिक काम में आर से अधिक हैकेल का उपयोग करता हूं, मुझे लगता है कि आर सबसे अच्छा विकल्प नहीं था। प्रतियोगिता के दौरान मैंने हैकेल और आर फ़ंक्शन परिभाषाओं को मिश्रित किया, और मैंने कार्यक्रम के लिए बहुत से छोटे टाइपो बनाये।

प्रतियोगिता के बारे में क्या अच्छा था, कि लगभग 80 प्रतिभागियों के लिए लगभग 20 000 रुपये पुरस्कार राशि थी। तो शीर्ष 25% प्रतिभागियों को 500 से 1500 रुपये प्रत्येक मिल गया। इसके अलावा, मुझे लगता है कि शीर्ष 15% प्रायोजक आईटी फर्मों में से एक से तुरंत नौकरी प्राप्त करते हैं।

तो यह एक जीत-जीत स्थिति है। यह मजेदार है, साथ ही आप पुरस्कार राशि प्राप्त कर सकते हैं। इसके अलावा आईटी फर्म खुश हैं, क्योंकि उनके पास शीर्ष प्रोग्रामर तक पहुंच है।

मैंने आईटी निर्णय निर्माताओं से बात करने का मौका दिया। उनमें से एक बड़े बैंक से था। मैंने साहसपूर्वक सुझाव दिया कि वे अपने विकास (जावा से स्विचंग) के लिए स्कैला में स्विच करने पर विचार करें। और आर और हास्केल का उपयोग करने पर विचार करने के लिए भी। यह मजेदार था, और उन्होंने यह भी कहा कि वे पहले ही स्कैला में देखे गए हैं!

नोट करना दिलचस्प था कि मेरे सबसे अच्छे दोस्तों ने प्रतियोगिता में बहुत अच्छा प्रदर्शन किया था। वह केवल 1 9 वर्ष का है, लेकिन वह शीर्ष 20% में अच्छा था और 500 रुपये पुरस्कार राशि मिली। उसने मुझे अपने कॉलेजों के 6 प्लस हराया, जिनके पास एक सम्मानजनक कंप्यूटर विज्ञान की डिग्री है। मेरे दोस्त प्रोग्राम हैकर शैली की तरह अधिक, लेकिन वह बहुत तेज था।

शीर्ष 10 का इस्तेमाल किया में लोग: 1) जावा 2) सी # और 3) सी ++ (कोई अन्य प्रोग्रामिंग शीर्ष 10 में भाषा)। रूबी, मुझे लगता है कि एकमात्र अन्य प्रोग्रामिंग भाषा उचित रूप से अच्छी तरह से स्कोर किया गया था।

अगली प्रतियोगिता के लिए पसंद की प्रोग्रामिंग भाषा शायद हैकेल होगी। एक कारण से, आर प्रोग्रामिंग के मुकाबले हैकेल के लिए 2 टीम साथी ढूंढना आसान है। और 3 व्यक्ति तक एक टीम बना सकते हैं।

मेरा आदर्श परिदृश्य बहुत हल्का वजन ढांचा होगा, जहां मैं प्रतियोगिता के लिए एक साथ कई प्रोग्रामिंग भाषाओं का उपयोग कर सकता हूं। इस तरह, मुख्य कोड हैकेल में लिखा जा सकता है (जो सभी टीम के साथी प्रोग्राम कर सकते हैं)। और कुछ विशिष्ट कार्यों को आर, या गणित में, या यहां तक ​​कि कुछ अन्य प्रोग्रामिंग भाषा (जैसे पायथन/ऋषि) में प्रोग्राम किया जा सकता है।

यह थोड़ा सा ओवरकिल लगता है। लेकिन मुझे लगता है कि यह बहुत उपयोगी होगा। ऐसे फ़ंक्शन की तरह जिसमें पैरामीटर के रूप में मैट्रिक्स है और एक मैट्रिक्स देता है। फिर यह ढांचा कार्य स्वचालित रूप से आर कोड से एक विश्वसनीय सेवा उत्पन्न करता है, इसलिए मैं किसी भी प्रोग्रामिंग भाषा से आर फ़ंक्शन को कॉल कर सकता हूं। मैट्रिक्स बस जेएसओएन डेटा (या कुछ अन्य धारावाहिक) के रूप में पारित किया गया है। ठीक है, लेकिन इस विषय से दूर है ...

तो अंत में कुछ सबक एक गोली सूची के रूप में सीखा है:

  • खाना लाने नहीं है। आपके पास खाने का समय नहीं है, और बाद में एक समृद्ध बुफे है
  • समय सीमित कारक है!
  • अगर तुम जीने के लिए कार्यक्रम अनुसंधान नहीं करते हैं, आर
  • प्रतियोगिता जहां अधिक समय नहीं है के लिए देखो प्रतियोगिता की अवधारणा का उपयोग नहीं करते (3-4 hourss न्यूनतम!)
  • सब सब में, शानदार है! दोनों प्रतिभागियों के लिए, लेकिन प्रायोजकों के लिए भी।

अपनी पोस्ट के लिए 'इटरेटर' की मदद से बड़े धन्यवाद !!

+0

प्रतियोगिता में शुभकामनाएं। आर के लिए एक जीतें :) – Iterator

+3

यह कहने के लिए खेद है, लेकिन आपका प्रश्न [faq] (http://stackoverflow.com/faq) में समझाया गया स्वरूप फिट नहीं है। भविष्य में, अपने प्रश्न को कई प्रश्नों में विभाजित करें जो एक-एक करके उत्तरदायी हैं। और आप के लिए शुभकामनाएँ। –

+0

मैं जोरीस से सहमत हूं। और भी, आप कुछ उदाहरण प्रश्न पोस्ट करके अधिक उचित उत्तर प्राप्त कर सकते हैं। निजी तौर पर, यदि समस्याएं बहुत गणितीय हैं तो मैं आर का उपयोग नहीं करूंगा - यदि कंप्यूटर बीजगणित प्रणाली बेहतर फिट है, तो इसका उपयोग करें। (उदा। गणित या इसके खुले स्रोत विकल्प।) – Iterator

उत्तर

24

मैं एक संबंधित, लेकिन अलग सवाल का जवाब देने जा रहा हूं। कोई अपराध नहीं, लेकिन आपके मूल सुझाव प्रोग्रामिंग प्रतियोगिता के लिए बहुत बुद्धिमान नहीं लगते हैं। इस तरह के संदर्भों में बिताए गए अधिकांश समय एक उत्तर और डिबगिंग (या बेहतर, डीबग करने की आवश्यकता से परहेज) में है।

इसके बजाय, मैं इस प्रश्न का उत्तर दूंगा: "आर में प्रमुख संसाधन क्या हैं जो तेजी से प्रोटोटाइप के लिए उपयोगी हैं, संसाधनों को जल्दी से ढूंढने में सक्षम होने पर ध्यान केंद्रित करने, तुरंत डीबग करने में सक्षम होने और डेटा की जांच करने में सक्षम होने के कारण जल्दी जल्दी?मैं संख्यात्मक अनुकूलन विधियों और बीजगणित सिस्टम का उपयोग करने की जरूरत है, मैं क्या जांच करनी चाहिए "

यहाँ मेरी जवाब हैं:

  1. RStudio या संभवतः क्रांति एनालिटिक्स 'आर, निर्भर करता है इंटरफ़ेस में अधिक उपयुक्त लग रहा है, जिस पर स्थापित करें आप दोनों अच्छे हैं। पूर्व में एक बहुत चिकनी जीयूआई है, बाद में कोड के प्रबंधन के लिए अधिक क्षमताओं के साथ एक और अधिक तीव्र इंटरफ़ेस है। दोनों को "समुदाय" आर पर कुछ अच्छी संपत्तियां हैं जो जानकारी देखने में सक्षम हैं और नेविगेट करते हैं पुस्तकालयों को जल्दी से मदद करें।
  2. example() से परिचित हो जाएं, पहचानें कि विग्नेट और ट्यूटोरियल कहां से प्राप्त करें (पैक से सीआरएएन पर आयु 'पृष्ठ), और demo() पर एक संक्षिप्त नज़र डालें।
  3. sos लाइब्रेरी का उपयोग करें, और मास्टर findFn का उपयोग करें।
  4. सीआरएएन पर कार्य दृश्यों को देखें - सुनिश्चित करें कि आप उच्च प्रदर्शन कंप्यूटिंग (यदि यह संबंधित होने जा रहे हैं) और ऑप्टिमाइज़ेशन के लिए टूल के लिए टूल के बारे में जानते हैं - किसी प्रकार के सॉल्वर का उपयोग करने के लिए यह काफी आम है, और a task view for that है।
  5. यदि आपका कोड प्रोटोटाइप या प्रतिस्पर्धा के दौरान धीरे-धीरे चल रहा है, तो आपको Rprof() चलाने की आवश्यकता होगी। पहले एक स्पिन के लिए ले लो। यदि आपके कोड में अधिक पुनरावृत्ति शामिल है तो आपको compiler पैकेज का उपयोग करने से भी लाभ हो सकता है। संक्षेप में: आप कंप्यूटर पर इंतजार नहीं करना चाहते हैं। यदि आप अलग-अलग कोरों में नौकरी पार्स कर सकते हैं तो आप foreach और doSMP या doMC पर भी देख सकते हैं। परिणामों को कुल करने के लिए, plyr और ldply जैसे मानक *apply फ़ंक्शंस जैसे lapply और apply से परिचित हो जाएं; rapply जानने के लिए एक और अच्छा है। (आप कार्रवाई करने के लिए सामान की बहुत सारी है और यह कुछ समय लेता है, mclapply को देखने या plyr कार्यों के लिए .parallel तर्क।)
  6. स्टैक ओवरफ़्लो पर: ब्राउज़ JD Long's questions - आपको लगता है कि आप इच्छा पता नहीं है की खोज करेंगे क्या बारे में ज्यादा इससे पहले कि आप इसे पूछने से पहले उससे पूछा गया हो। और वहां पहले से ही एक जवाब है।
  7. अपने लिए बहुत कम कोड टेम्पलेट बनाएं। मास्टर फ़ंक्शन ताकि आपको इन्हें भीड़ में सीखने की आवश्यकता न हो। debug() और browser() का उपयोग करके इन्हें डीबग और चरणबद्ध करने का तरीका जानें।
  8. आप चीजों को गिनती hash पैकेज (पर्ल और पायथन हैश तालिकाओं के लिए समान) का उपयोग कैसे करें और चाबी है कि बहुत लंबा hash के लिए इस्तेमाल किया जा रहे हैं के लिए digest उपयोग करने का तरीका जानने के लिए है, तो (संदर्भ के लिए this question देखें)
  9. यदि आपको चीजों को साजिश करने की आवश्यकता है, तो plot या ggplot2 का उपयोग करके hist, boxplot और कुछ अन्य लोगों के साथ, कुछ मूल उदाहरण प्लॉट तैयार किए जाएं। यदि आप पहले से ही ggplot2 नहीं जानते हैं, तो स्थगित करें, लेकिन आपको इससे परिचित होना चाहिए। यदि आप बहुत सारे डेटा का उपयोग करते हैं, तो सुनिश्चित करें कि आप hexbin जानते हैं। यदि आपको डेटा से बातचीत करनी होगी, तो iplots और iplot, ihist, और समांतर समन्वय प्लॉट (ipcp) जैसे दिलचस्प टूल जानें।
  10. सुनिश्चित करें कि आप सूचियों, डेटा फ्रेम और मैट्रिस का उपयोग कैसे करें, सबस्क्रिप्टिंग समेत, पंक्तियों (पंक्तियों, कॉलम) इंडेक्स के आधार पर प्रविष्टियों के लुकअप। (फिर, इन वस्तुओं में से कुछ पर परिवर्तन और संचालन के लिए plyr की जांच करना सुनिश्चित करें।)
  11. data.table() से परिचित हो जाएं - यह डेटा फ्रेम और मैट्रिस के साथ बहुत सी चीजों के लिए असाधारण रूप से कुशल है।
  12. यदि आपको प्रतीकात्मक गणित करने की आवश्यकता है, तो सुनिश्चित करें कि आप इसके लिए पैकेज जानते हैं या अन्य प्रतीकात्मक गणित के लिए एक और स्टैंडअलोन टूल प्राप्त करें। Ryacas एक पैकेज है जो उपयोगी प्रतीत होता है।
  13. संक्षेप में आर का पीडीएफ प्राप्त करें, ताकि आप उपयोगी तरीकों के लिए इसे तेजी से खोज सकें। अन्यथा, किताब खुद ही प्राप्त करें। वेनेबल्स & रिपली, आर कुकबुक और अन्य जैसी कई अन्य पुस्तकें आपके अनुभव के आधार पर उपयोगी हो सकती हैं।
  14. यदि आप पहले से ही एक अच्छा संपादक (उदा। Emacs) या आईडीई (उदा। ग्रहण) महारत हासिल कर चुके हैं, तो इसके साथ चिपके रहें और आर को बाइंडिंग की तलाश करें। अन्यथा, एक सरल जिसे आप तुरंत उपयोग करना शुरू कर सकते हैं नोटपैड ++ है। ब्लॉक चयन करने में सक्षम होने के नाते एक संपादक में एक बहुत ही उपयोगी संपत्ति है। कोड उदाहरणों की एक संपूर्ण निर्देशिका पदानुक्रम के माध्यम से खोज करने में सक्षम होने के नाते एक और उपयोगी क्षमता है।
  15. यदि आपको डेटाबेस डेटा से जुड़े कुछ भी करने की आवश्यकता है, तो आप RSQLite और sqldf जानना चाहेंगे, हालांकि ये गणित प्रतियोगिता के लिए प्रासंगिक नहीं हो सकते हैं।
  16. आर उदाहरणों का एक गुच्छा खोलें ताकि आप चीजों को आजमा सकें। :) [यह वास्तव में गंभीर है: कई उदाहरण चलकर, आप कुछ हद तक कोशिश कर रहे विलंब से बच सकते हैं, परिणामों की प्रतीक्षा कर रहे हैं, और परिणामों को डिबग कर सकते हैं।]
5

के लिए (2), तो आप सिर्फ कर सकता है:

sindeg <- function(x) sin(x*pi/180) 
+0

धन्यवाद! – mrsteve

8

की तरह कुछ के लिए (1), आप कर सकते हैं
f <- function(..., body) 
{ 
    dots <- substitute(...) 
    body <- substitute(body) 
    f <- function() 
    formals(f) <- dots 
    body(f) <- body 
    environment(f) <- parent.env(environment()) 
    f 
} 

जो आप लिखते हैं की सुविधा देता है, जैसे, g <- f(x, y, body=x+y) लेकिन मैं कर रहा हूँ सुनिश्चित नहीं है कि यह आपको कितना दूर ले जाता है।

+0

कूल, लेकिन निश्चित रूप से यह 2 महत्वपूर्ण स्ट्रोक के लिए इसके लायक नहीं हो सकता है। – Karl

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