কিভাবে বড় আর প্রোগ্রামের আয়োজন?


161

আমি যখন কোনও জটিলতার আর প্রকল্প হাতে নিই তখন আমার স্ক্রিপ্টগুলি দ্রুত দীর্ঘ এবং বিভ্রান্ত হয়।

আমার কোডগুলি সর্বদা কাজ করে আনন্দিত হতে পারে সেজন্য আমি কী কী পদ্ধতি অবলম্বন করতে পারি? আমি মত জিনিস সম্পর্কে চিন্তা করছি

  • উত্স ফাইলগুলিতে ফাংশন স্থাপন
  • যখন অন্য উত্স ফাইল থেকে কিছু ভাঙ্গতে হবে
  • মাস্টার ফাইলে কী হওয়া উচিত
  • সাংগঠনিক ইউনিট হিসাবে ফাংশন ব্যবহার করে (এটি কার্যকরভাবে দেওয়া হয়েছে যে বিশ্বব্যাপী রাষ্ট্র অ্যাক্সেস করা শক্ত করে)
  • ইনডেন্টেশন / লাইন বিরতি অনুশীলন।
    • ট্রিট (যেমন {?
    • 1 বা 2 লাইনে এমন জিনিস রাখুন)?

মূলত, বড় আর স্ক্রিপ্টগুলি সংগঠিত করার জন্য আপনার থাম্বের নিয়ম কী?


11
সম্প্রদায় উইকি হওয়া উচিত
সাইলেন্টঘস্ট

আপনি ProjectTemplateপ্যাকেজটি দেখতে চাইতে পারেন ।
সিটিব্রাউন

উত্তর:


71

স্ট্যান্ডার্ড উত্তরটি হ'ল প্যাকেজগুলি ব্যবহার করা - রাইটিং আর এক্সটেনশন ম্যানুয়াল পাশাপাশি ওয়েবে বিভিন্ন টিউটোরিয়াল দেখুন।

এটা আপনাকে দেয়

  • বিষয় অনুসারে আপনার কোডটি সংগঠিত করার জন্য একটি পরিমাণ-স্বয়ংক্রিয় উপায়
  • ইন্টারফেস সম্পর্কে আপনাকে ভাবিয়ে তোলে, আপনাকে সাহায্যের ফাইল লিখতে উত্সাহিত করে
  • মাধ্যমে প্রচুর পরিমাণে চেক পরীক্ষা R CMD check
  • রিগ্রেশন টেস্ট যুক্ত করার সুযোগ
  • পাশাপাশি নেমস্পেসের জন্য একটি উপায়।

source()কোড চালিয়ে যাওয়া সত্যিই সংক্ষিপ্ত স্নিপেটের জন্য কাজ করে। অন্য সমস্ত কিছু প্যাকেজে থাকা উচিত - আপনি অভ্যন্তরীণ সংগ্রহস্থলের জন্য অভ্যন্তরীণ প্যাকেজগুলি লিখতে পারেন বলে প্রকাশ করার পরিকল্পনা না করলেও।

'কীভাবে সম্পাদনা করবেন' অংশ হিসাবে, আর ইন্টারনালস ম্যানুয়ালটিতে সেকশন 6 এ চমৎকার আর কোডিং মান রয়েছে Otherwise নইলে আমি ইমাসাসের ইএসএস মোডে ডিফল্ট ব্যবহার করার ঝোঁক ।

আপডেট ২০০৮-আগস্ট -13: ডেভিড স্মিথ গুগল আর স্টাইল গাইড সম্পর্কে সবেমাত্র ব্লগ করেছেন ।


8
যদি আপনি "উত্সগতভাবে" আপনার উত্স-বৃক্ষ / বিশ্লেষণ বাড়িয়ে তুলছেন তবে কি আপনার এটি করা কঠিন / অসুবিধে হয় না? আপনি যদি আপনার কোডটিতে একটি ভুল লক্ষ্য করেন (একটি নতুন সমস্যার জায়গাটি অন্বেষণ করার সময় সাধারণ), আপনার (i) উত্স ঠিক করতে হবে; (ii) প্যাকেজ পুনরায় ইনস্টল করুন; (iii) এটিকে আপনার ওয়ার্কস্পেসে পুনরায় লোড করবেন? ইতিমধ্যে লোড হওয়া প্যাকেজটি পুনরায় লোড করার জন্য লাইব্রেরি (...) কল করার কোনও উপায় আছে (উপরে ধাপ iii)? আপনার কর্মক্ষেত্রটি মেরে ফেলতে হবে না, পুনরায় চালু করুন আর আপনার লাইব্রেরি / প্যাকেজটি পুনরায় লোড করুন এটি সঠিক কিনা তা দেখার জন্য?
স্টিভ লিয়ানোগ্লু

1
আর কোডিং স্টাইলের জন্য গুগলিংয়ের চেষ্টা করছেন।
হ্যাডলি

3
@ স্টিভিলিয়ানোগ্লু আমি জানি এটি বেশ পুরানো তবে হ্যাডলির ডেভলটুলস প্যাকেজটি আপনার কোডগুলি সমস্ত পুনরায় লোড করে তোলে।
ডিসেম্বর

1
এই ব্লগ পোস্টটি একটি বেয়ার হাড়ের প্রথম প্যাকেজ তৈরির জন্য একটি (আমার মতামত) সত্যিই খুব ভাল দ্রুত টিউটোরিয়াল দিয়েছে: hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch
panterasBox


51

আমি তাদের নিজস্ব ফাইলে বিভিন্ন কার্যকারিতা যুক্ত করতে চাই।

তবে আমি আর এর প্যাকেজ সিস্টেম পছন্দ করি না। এটি ব্যবহার করা বরং কঠিন।

আমি একটি হালকা ওজনের বিকল্প পছন্দ করি, একটি পরিবেশের ভিতরে কোনও ফাইলের ফাংশন স্থাপন করতে (প্রতিটি অন্যান্য ভাষাই যাকে "নামস্থান" বলে ডাকে) এবং এটি সংযুক্ত করে। উদাহরণস্বরূপ, আমি এর মতো একটি 'ব্যবহারকারীর' গ্রুপ তৈরি করেছি:

util = new.env()

util$bgrep = function [...]

util$timeit = function [...]

while("util" %in% search())
  detach("util")
attach(util)

এই সব একটি ফাইল ইউজার.আর । আপনি যখন এটি উত্স করেছেন, আপনি পরিবেশটি 'ব্যবহার' পাবেন যাতে আপনি কল করতে পারেন util$bgrep()এবং এই জাতীয়; তবে তদ্ব্যতীত, attach()কলটি এটিকে এত ন্যায়বিচার bgrep()এবং এ জাতীয় কাজ সরাসরি করে। যদি আপনি এই সমস্ত ফাংশনগুলি তাদের নিজস্ব পরিবেশে না রাখেন তবে তারা দোভাষীদের শীর্ষ-স্তরের নেমস্পেসকে (যেটি ls()দেখায়) দূষিত করে ।

আমি পাইথনের সিস্টেম অনুকরণ করার চেষ্টা করছিলাম, যেখানে প্রতিটি ফাইলই মডিউল। এটি থাকলে ভাল হবে তবে এটি ঠিক আছে বলে মনে হচ্ছে।


ধন্যবাদ, ব্রেন্ডন এটা খুব দরকারী। লুপ লুপের কী হবে? (! ("ইউজার"% এর% সন্ধান ()) এ সংযুক্ত (ব্যবহার) হলে কী দোষ হবে
ড্যান গোল্ডস্টেইন

2
তাই আপনি যদি এটির এবং এই জাতীয় কিছু টুইট করতে চান তবে আপনি বার বার উত্স ("Use.R") করতে পারেন।
ব্রেন্ডন ওকননর

আপনার সত্যিকার অর্থে কিছুক্ষণের জন্য লুপের দরকার নেই - আপনার যা দরকার তা বিচ্ছিন্ন (ব্যবহার)) আমি মনে করতে পারি না এটি যদি ত্রুটি দেয় বা না দেয় যদি এটি ইতিমধ্যে লোড না করা হয় তবে এটি নিরাপদ এবং কাজ করে। পরামর্শ স্বাগত।
ব্রেন্ডন ওকননর

1
ফাংশন-নির্দিষ্ট পরিবেশ তৈরি করা এবং এটি সংযুক্ত করা আমার পক্ষে যাওয়ার উপায়। আরেকটি পদ্ধতি অন্যভাবে (আরও modularity এর সঙ্গে) একই জিনিস অর্জন করা ব্যবহার করা sys.source: MyEnv <- attach(NULL, name=s_env); sys.source(file, MyEnv)। আমি এমনকি (নিজের পরিবেশে!) প্রারম্ভকালে এমন একটি ফাংশন ঘোষণা করি sys.source2যা একই নামের পরিবেশটি ইতিমধ্যে এখানে উপস্থিত থাকলে এবং নতুন একটি তৈরি করার পরিবর্তে এটিকে ফিড দিলে দেখা যাবে। এটি ব্যক্তিগত ক্রিয়াকলাপগুলি দ্রুত, সহজ এবং
মজাদারভাবে সংযুক্ত করে

5
এটি আজই দেখেছি এবং এটি একটি প্যাকেজ বিকল্পের জন্য প্রযোজ্য: github.com/klmr/modules
ctbrown

34

এটি যদি আপনি একজন প্রোগ্রামার হয়ে থাকেন তবে এটি কিছুটা সুস্পষ্ট মনে হতে পারে তবে কোডটির যৌক্তিক এবং শারীরিক ইউনিট সম্পর্কে আমি কীভাবে চিন্তা করি তা এখানে।

আমি জানি না এটি আপনার ক্ষেত্রে কিনা তবে আমি যখন আর-এ কাজ করছি তখন আমি খুব কমই একটি বৃহত জটিল প্রোগ্রামটি মাথায় রেখেই শুরু করি। আমি সাধারণত একটি স্ক্রিপ্টে শুরু করি এবং প্রায়শই ফাংশন ব্যবহার করে যৌক্তিকভাবে পৃথকযোগ্য ইউনিটে পৃথক কোড করি। ডেটা ম্যানিপুলেশন এবং ভিজ্যুয়ালাইজেশন কোড ইত্যাদি তাদের নিজস্ব ফাংশন ইত্যাদিতে স্থাপন করা হয় এবং এ জাতীয় ফাংশনগুলি ফাইলের একটি বিভাগে (শীর্ষে ডেটা ম্যানিপুলেশন, তারপরে ভিজ্যুয়ালাইজেশন ইত্যাদি) একসাথে গোষ্ঠীভুক্ত হয়। শেষ পর্যন্ত আপনি কীভাবে আপনার স্ক্রিপ্ট বজায় রাখতে এবং ত্রুটি হার কমিয়ে আনতে পারেন সে সম্পর্কে ভাবতে চান।

আপনার ফাংশনটি কীভাবে সূক্ষ্ম / মোটা দান করা যায় তা পরিবর্তিত হবে এবং বিভিন্ন থাম্বের বিভিন্ন বিধি রয়েছে: উদাহরণস্বরূপ 15 টি লাইন কোড, বা "কোনও কাজ যা তার নাম দ্বারা চিহ্নিত একটি কাজ করার জন্য দায়বদ্ধ হওয়া উচিত" ইত্যাদি Your । যেহেতু আরআর কল-বাই-রেফারেন্সকে সমর্থন করে না, আমি প্রায়শই আমার ফাংশনগুলিকে খুব সূক্ষ্ম শস্যযুক্ত করে তুলি যখন এতে ডেটা ফ্রেম বা চারপাশের অনুরূপ কাঠামো পাস করার সাথে জড়িত থাকে। আমি যখন আর এর সাথে প্রথম শুরু করি তখন এটি কিছু নির্বোধ পারফরম্যান্স ভুলের জন্য অতিরিক্ত ক্ষতিপূরণ হতে পারে।

যখন লজিকাল ইউনিটগুলি তাদের নিজস্ব শারীরিক ইউনিটগুলিতে (উত্স ফাইল এবং প্যাকেজের মতো বৃহত্তর গ্রুপিংয়ের মতো) নিষ্কাশন করবেন? আমার দুটি মামলা আছে। প্রথমত, যদি ফাইলটি খুব বড় হয়ে যায় এবং যৌক্তিকভাবে সম্পর্কযুক্ত ইউনিটগুলির মধ্যে প্রায় স্ক্রোল করা একটি বিরক্তি হয় is দ্বিতীয়ত, আমার যদি ফাংশন থাকে যা অন্যান্য প্রোগ্রামগুলি দ্বারা পুনরায় ব্যবহার করা যায়। আমি সাধারণত কিছু গোষ্ঠীযুক্ত ইউনিট স্থাপন করে শুরু করি, ডেটা ম্যানিপুলেশন ফাংশনগুলি পৃথক ফাইলে বলুন। আমি তখন অন্য কোনও স্ক্রিপ্ট থেকে এই ফাইলটি উত্স করতে পারি।

আপনি যদি আপনার ফাংশন স্থাপন করতে চলেছেন তবে আপনাকে প্যাকেজগুলি সম্পর্কে চিন্তাভাবনা শুরু করতে হবে। আমি বিভিন্ন কারণে আর কোড দ্বারা উত্পাদনে বা অন্যদের পুনরায় ব্যবহারের জন্য স্থাপন করি না (সংক্ষেপে: org সংস্কৃতি অন্যান্য ল্যাঙ্গগুলি পছন্দ করে, কর্মক্ষমতা সম্পর্কে উদ্বেগ, জিপিএল ইত্যাদি), এছাড়াও, আমি আমার উত্সাহিত ফাইলগুলির সংগ্রহগুলিতে নিয়মিত পরিমার্জন করতে এবং যুক্ত করার প্রবণতা রাখি এবং আমি যখন পরিবর্তন করি তখন প্যাকেজগুলির সাথে চুক্তি করব না। সুতরাং এই ফ্রন্টের আরও তথ্যের জন্য আপনার অন্যান্য প্যাকেজ সম্পর্কিত উত্তরগুলি যেমন ডার্কের মতো দেখতে হবে।

পরিশেষে, আমি মনে করি আপনার প্রশ্নটি আর এর জন্য অগত্যা নির্দিষ্ট নয় I আমি স্টিভ ম্যাককনেল কর্তৃক কোড কমপ্লিটটি পড়ার পরামর্শ দিচ্ছি যা এই জাতীয় সমস্যাগুলি এবং কোডিং অনুশীলনগুলি সম্পর্কে প্রচুর জ্ঞানসম্পন্ন।


3
খুব সহায়ক মন্তব্য, আরস, আপনাকে ধন্যবাদ। আমি একজন প্রোগ্রামার, তবে অন্যের সাথে চেক করা ভাল। আপনি যখন বলেন "যেহেতু আর কল-বাই-রেফারেন্সকে সমর্থন করে না, আমি সাধারণত আমার ফাংশনগুলিকে খুব সূক্ষ্ম দান করা থেকে সাবধান", আমি আপনাকে শুনি। আমি রিডটাটা () এর মতো ফাংশন লিখতে অভ্যস্ত; CleanData (); তথ্য যাচাই(); GraphData (); আর আর সেই জটিল করে তোলে। আমি অন্যান্য ধারণাগুলিতে যেভাবে ফাংশন ব্যবহার করি সেভাবে "উত্স" ব্যবহার করা আমার এই ধারণার সাথে জাগ্রত।
ড্যান গোল্ডস্টিন

2
ঠিক বলেছেন ড্যান। আমি নিজেকে ডেটাসেট প্রস্তুতির কাজগুলির জন্য "উত্স" ব্যবহার করে দেখতে পাই, তাই আমি অন্যান্য স্ক্রিপ্টগুলিতে যেখানে প্রস্তুত বিশদটি তৈরি করা হয় কেবল সেখানে প্রস্তুত ডেটা ফ্রেম ব্যবহার করতে পারি। আমি কখনই নিশ্চিত ছিলাম না যে এটি ভাল অনুশীলন ছিল কারণ এটি কেবল অন্য ভাষার তুলনায় অদ্ভুত মনে হয় - আরও শেল স্ক্রিপ্টিংয়ের মতো। নোটগুলির তুলনা করা ভাল। :)
Ars

সুন্দর উত্তর এবং মন্তব্য। আমি এটি আর-তে বিশেষ বিরক্তিকর বলে মনে করি কারণ আপনি প্রায়শই কোনও নির্দিষ্ট বিন্যাসে থাকা ডেটা নিয়ে কাজ করছেন, যার জন্য পুনরায় ব্যবহারযোগ্য ফাংশনগুলি লিখতে সত্যিই শক্ত। সুতরাং আপনি কি সুন্দর ফাংশনাল কোডটি লিখেন, যদিও আপনি জানেন যে এটি কখনও পুনরায় ব্যবহৃত হবে না, বা আপনি কেবলমাত্র বড় এবং অবজেক্টগুলির সাথে সামান্য কিছুটা অতিরিক্ত দক্ষতা পেতে দ্রুত এবং বাজে প্রক্রিয়াজাতীয় কোডটি লেখেন? একটি দ্বিধাদ্বন্দ্বের বিট .. আর কল-বাই-রেফারেন্সের সাথে একেবারে দুর্দান্ত হবে ..
নট 101

ঠিক আছে, এটি করা যায়, সাজানো , কিন্তু কোনও দক্ষতা লাভ নেই ...
naught101

19

আমি ডার্কের পরামর্শের সাথে একমত! আইএমএইচও, সাধারণ স্ক্রিপ্টগুলি থেকে ডকুমেন্টেড প্যাকেজগুলিতে আপনার প্রোগ্রামগুলি সংগঠিত করা হ'ল লেখার জন্য ওয়ার্ড থেকে টেক্স / ল্যাটেক্সে স্যুইচ করার মতো R আমি খুব দরকারী আর প্যাকেজগুলি তৈরি করা: ফ্রিডরিচ লিশের একটি টিউটোরিয়ালটি একবার দেখে নেওয়ার পরামর্শ দিই।


6
প্যাকেজগুলি আকর্ষণীয় দেখায়। যাইহোক, আমি উদ্বিগ্ন ছিলাম তারা ওভারকিল হতে পারে। আমি সাধারণ উদ্দেশ্যমূলক কোড লিখছি না। আমি যা করছি তার বেশিরভাগটি এই হাইপোথিসিসের পরীক্ষা করা, সেই হাইপোথিসিস পরীক্ষা করা, এটি প্লট করা, প্লটের প্যারামিটারগুলি সামঞ্জস্য করা, প্লট করা, ডেটা পুনরায় আকার দিন, প্লট করুন। আমি এমন জিনিস করছি যা একবার শেষ হয়ে গেলে সম্ভবত আর কখনও চালানো হবে না।
ড্যান গোল্ডস্টেইন

1
সেক্ষেত্রে আপনার সোয়েভের দিকে নজর দেওয়া উচিত। এটি লটেক্সের সাথে আর কোডটি একত্রিত করে। সুতরাং আপনার বিশ্লেষণ এবং প্রতিবেদনের উত্স একসাথে আছে।
থিয়েরি

15

আমার সংক্ষিপ্ত উত্তর:

  1. পর্যাপ্ত সাধারণ আউটপুট এবং ইনপুট সনাক্ত করে আপনার ফাংশন সাবধানে লিখুন;
  2. গ্লোবাল ভেরিয়েবলের ব্যবহার সীমিত করুন;
  3. এস 3 অবজেক্ট এবং যেখানে উপযুক্ত, এস 4 অবজেক্ট ব্যবহার করুন;
  4. প্যাকেজগুলিতে ফাংশনগুলি রাখুন, বিশেষত যখন আপনার ফাংশনগুলি সি / ফোর্টরান কল করে।

আমি বিশ্বাস করি আর উত্পাদনে আর বেশি ব্যবহৃত হয়, তাই পুনরায় ব্যবহারযোগ্য কোডের প্রয়োজন আগের চেয়ে বেশি। আমি দোভাষীটি আগের চেয়ে অনেক বেশি শক্তিশালী দেখতে পেলাম। আর সন্দেহ নেই যে আর সি এর চেয়ে ১০০-৩০০x আস্তে ধীরে ধীরে, তবে সাধারনত বাটলেনকে কোডের কয়েকটি লাইন ঘিরে কেন্দ্রীভূত করা হয়, যা সি / সি ++ তে অর্পিত হতে পারে। আমি মনে করি যে ডেটা ম্যানিপুলেশন এবং পরিসংখ্যান বিশ্লেষণে আর এর শক্তিকে অন্য ভাষায় অর্পণ করা ভুল হবে। এই দৃষ্টান্তগুলিতে, পারফরম্যান্সের জরিমানা কম, এবং কোনও ক্ষেত্রে উন্নয়নের চেষ্টায় সঞ্চয়যোগ্য। মৃত্যুদণ্ডের সময় যদি একা হয়ে থাকত তবে আমরা সকলেই লেখককে একত্র করতাম।


11

আমি কীভাবে প্যাকেজ লিখতে হবে তা বোঝার অর্থ করেছি তবে সময়টি বিনিয়োগ করে নি। আমার প্রতিটি মিনি-প্রকল্পের জন্য আমি আমার নিম্ন-স্তরের সমস্ত ফাংশন 'ফাংশন /' নামে একটি ফোল্ডারে রাখি এবং এগুলিকে পৃথক নেমস্পেসে উত্পন্ন করি যা আমি স্পষ্টভাবে তৈরি করি।

নিম্নলিখিত কোডের লাইনগুলি অনুসন্ধানের পথে "মাইফুঙ্কস" নামে একটি পরিবেশ তৈরি করবে যদি এটি ইতিমধ্যে উপস্থিত না থাকে (সংযুক্তি ব্যবহার করে), এবং এটি আমার 'ফাংশন /' ডিরেক্টরিতে .r ফাইলগুলিতে অন্তর্ভুক্ত ফাংশনগুলি দ্বারা পপুলেট করুন (ব্যবহার করে) sys.source)। আমি সাধারণত "ইউজার ইন্টারফেস" এর জন্য উচ্চ স্তরের ফাংশনগুলি (নিম্ন স্তরের ফাংশনগুলিকে অনুরোধ করা হয়) এর জন্য বোঝানো আমার প্রধান স্ক্রিপ্টের শীর্ষে এই লাইনগুলি রাখি।

if( length(grep("^myfuncs$",search()))==0 )
  attach("myfuncs",pos=2)
for( f in list.files("functions","\\.r$",full=TRUE) )
  sys.source(f,pos.to.env(grep("^myfuncs$",search())))

আপনি যখন পরিবর্তন করেন আপনি সর্বদা একই লাইনের সাথে এটি পুনরায় উত্স করতে পারেন, বা এর মতো কিছু ব্যবহার করতে পারেন

evalq(f <- function(x) x * 2, pos.to.env(grep("^myfuncs$",search())))

আপনার তৈরি পরিবেশে সংযোজন / পরিবর্তনগুলি মূল্যায়ন করতে।

এটি আমি জানি, কিন্তু এটি সম্পর্কে খুব আনুষ্ঠানিক হওয়া এড়ানো হয়নি (তবে আপনি যদি সুযোগ পান তবে আমি প্যাকেজ সিস্টেমকে উত্সাহিত করি - আশা করি ভবিষ্যতে আমি সেভাবে মাইগ্রেশন করব)।

কোডিং কনভেনশন সম্পর্কে, আমি কেবল নান্দনিকতার বিষয়েই এটি দেখেছি (আমি তাদের পছন্দ করি এবং শিথিলভাবে অনুসরণ করি তবে আমি আর খুব বেশি কোঁকড়া ধনুর্বন্ধনী ব্যবহার করি না):

http://www1.maths.lth.se/help/R/RCC/

[, ড্রপ = ফলস] এবং <- এর ব্যবহার সম্পর্কিত অন্যান্য "কনভেনশনস" রয়েছে যেমন ব্যবহারের ক্ষেত্রে বিভিন্ন উপস্থাপনায় (সাধারণত মূল বক্তব্য) প্রস্তাবিত অ্যাসাইনমেন্ট অপারেটর হিসাবে! সম্মেলন, তবে আমি মনে করি না যে এগুলির কোনওটি কঠোর (যদিও [, ড্রপ = ফলস]] এমন প্রোগ্রামগুলির জন্য দরকারী যা আপনি প্রত্যাশিত ইনপুট সম্পর্কে নিশ্চিত নন)।


6

প্যাকেজগুলির পক্ষে আমাকে অন্য ব্যক্তি হিসাবে গণনা করুন। আমি ম্যান পেজ এবং ভিগনেট লেখার ক্ষেত্রে বেশ গরিব হওয়া স্বীকার করব যতক্ষণ না / যখন আমার করতে হবে (অর্থাত মুক্তি পেয়েছে), তবে এটি সোর্স ডো-কে বান্ডিল করার আসল উপায়ে তৈরি করে। এছাড়াও, আপনি যদি নিজের কোড বজায় রাখতে গুরুতর হন তবে ডার্ক যে পয়েন্টগুলি নিয়ে আসে সেগুলি প্লাইয় আসে।


4

আমিও একমত। শুরু করতে প্যাকেজ.সেকলেটটন () ফাংশনটি ব্যবহার করুন। এমনকি যদি আপনি ভাবেন যে আপনার কোডটি আর কখনও চালানো না যায় তবে এটি আপনাকে আরও সাধারণ কোড তৈরি করতে উদ্বুদ্ধ করতে সহায়তা করতে পারে যা পরে আপনার সময় সাশ্রয় করতে পারে।

বৈশ্বিক পরিবেশে অ্যাক্সেসের ক্ষেত্রে, << - অপারেটরটি এটি নিরুৎসাহিত করা সত্ত্বেও সহজ।


3

প্যাকেজগুলি কীভাবে লিখতে হয় তা শিখতে না পেরে আমি সবসময় সাব স্ক্রিপ্টগুলি স্যুরস করে সংগঠিত করেছি। এটি লেখার ক্লাসগুলির সাথে সমান তবে জড়িত নয়। এটি অগ্রগামীভাবে মার্জিত নয় তবে আমি খুঁজে পাই যে আমি সময়ের সাথে সাথে বিশ্লেষণগুলি তৈরি করি। একবার যখন আমার একটি বড় বিভাগ কাজ করে তবে আমি প্রায়শই এটি একটি ভিন্ন স্ক্রিপ্টে স্থানান্তর করি এবং কেবল এটি উত্স উত্পন্ন করি যেহেতু এটি ওয়ার্কস্পেসের অবজেক্টগুলিকে ব্যবহার করবে। সম্ভবত আমাকে বেশ কয়েকটি উত্স থেকে ডেটা আমদানি করতে হবে, সেগুলির সমস্তকে বাছাই করুন এবং ছেদগুলি সন্ধান করতে হবে। আমি এই বিভাগটি একটি অতিরিক্ত স্ক্রিপ্টে রাখতে পারি। তবে, আপনি যদি অন্য "লোকদের" জন্য আপনার "অ্যাপ্লিকেশন" বিতরণ করতে চান বা এটি কিছু ইন্টারেক্টিভ ইনপুট ব্যবহার করে থাকে তবে প্যাকেজটি সম্ভবত একটি ভাল রুট। একজন গবেষক হিসাবে আমার কদাচিৎ আমার বিশ্লেষণ কোডটি বিতরণ করা দরকার তবে এটিকে আরও বাড়িয়ে তোলা বা টুইট করা দরকার।


আমি এই পদ্ধতিটি ব্যবহার করেছি তবে তখন থেকেই বুঝতে পেরেছি যে ফাংশন এবং প্যাকেজগুলি উত্সের চেয়ে ভাল ("Next_script.R")। আমি এটি সম্পর্কে এখানে লিখেছি: স্ট্যাকওভারফ্লো.com
আর্থার ইপ

1

আমি একটি আর বড় প্রকল্প একসাথে রাখার জন্য সঠিক কর্মপ্রবাহের পবিত্র পাথরটি অনুসন্ধান করছি। আমি গত বছর এই প্যাকেজটি রিসুইট বলে পেয়েছি এবং অবশ্যই আমি এটি খুঁজছিলাম। এই আর প্যাকেজটি স্পষ্টভাবে বৃহত আর প্রকল্পগুলি স্থাপনের জন্য তৈরি করা হয়েছিল তবে আমি দেখতে পেয়েছি যে এটি ছোট, মাঝারি আকারের এবং বড় আকারের আর প্রকল্পের জন্য ব্যবহার করা যেতে পারে। আমি এক মিনিটে (নীচে) বাস্তব বিশ্বের উদাহরণগুলির লিঙ্কগুলি দেব, তবে প্রথমে আমি আর প্রকল্পগুলি তৈরির নতুন দৃষ্টান্তটি ব্যাখ্যা করতে চাই rsuite

বিঃদ্রঃ. আমি এর স্রষ্টা বা বিকাশকারী নই rsuite

  1. আমরা আরস্টুডিওর সাথে সমস্ত ভুল প্রকল্প করে চলেছি; লক্ষ্যটি কোনও প্রকল্প বা প্যাকেজ তৈরি না করে বৃহত্তর সুযোগের হওয়া উচিত। রুশিতে আপনি একটি সুপার-প্রজেক্ট বা মাস্টার প্রজেক্ট তৈরি করেন যা স্ট্যান্ডার্ড আর প্রকল্পগুলি এবং আর প্যাকেজগুলি ধারণ করে, সমস্ত সংমিশ্রণেই সম্ভব।

  2. আর-সুপার-প্রকল্পের মাধ্যমে makeনীচে আর প্রকল্পগুলির নীচের স্তরগুলি পরিচালনা করার জন্য আপনার আর ইউনিক্সের প্রয়োজন হবে না ; আপনি শীর্ষে আর স্ক্রিপ্ট ব্যবহার করেন। আমি আপনাকে দেখাতে দিন। আপনি যখন কোনও রসুইট মাস্টার প্রকল্প তৈরি করেন, আপনি এই ফোল্ডারটির কাঠামোটি পাবেন:

এখানে চিত্র বর্ণনা লিখুন

  1. ফোল্ডারটি Rযেখানে আপনি আপনার প্রকল্প পরিচালনার স্ক্রিপ্টগুলি রাখবেন, সেগুলি প্রতিস্থাপন করবে make

  2. ফোল্ডারটি packagesএমন ফোল্ডার যেখানে rsuiteসুপার-প্রজেক্টটি রচনা করে এমন সমস্ত প্যাকেজ ধারণ করে। আপনি এমন প্যাকেজটি অনুলিপি করতে পারেন যা ইন্টারনেট থেকে অ্যাক্সেসযোগ্য নয় এবং আরএসইউইটিও এটি তৈরি করবে।

  3. ফোল্ডারটি deploymentযেখানে rsuiteপ্যাকেজ DESCRIPTIONফাইলগুলিতে নির্দেশিত সমস্ত প্যাকেজ বাইনারি লিখবে । সুতরাং, এটি নিজেই, আপনি সম্পূর্ণ পুনরুত্পাদনযোগ্য অ্যাক্রোস সময় প্রজেক্ট করেন।

  4. rsuiteসমস্ত অপারেটিং সিস্টেমের জন্য একটি ক্লায়েন্টের সাথে আসে। আমি তাদের সব পরীক্ষা করেছি। তবে আপনি এটি addinআরস্টুডিওর জন্য হিসাবে ইনস্টল করতে পারেন ।

  5. rsuiteএছাড়াও আপনাকে condaতার নিজস্ব ফোল্ডারে একটি বিচ্ছিন্ন ইনস্টলেশন তৈরি করতে দেয় conda। এটি কোনও পরিবেশ নয় তবে আপনার যন্ত্রের অ্যানাকোন্ডা থেকে প্রাপ্ত একটি দৈহিক পাইথন ইনস্টলেশন। এটি আর এর সাথে একসাথে কাজ করে SystemRequirements, যেখান থেকে আপনি চাইলে যে কোনও কন্ডা চ্যানেল থেকে আপনি চান সমস্ত পাইথন প্যাকেজ ইনস্টল করতে পারেন।

  6. আপনি অফলাইনে থাকাকালীন আর প্যাকেজগুলি টানতে স্থানীয় সংগ্রহস্থলও তৈরি করতে পারেন বা পুরো জিনিসটি আরও দ্রুত তৈরি করতে চান।

  7. আপনি যদি চান, আপনি জিপ ফাইল হিসাবে আর প্রকল্পটিও তৈরি করতে এবং সহকর্মীদের সাথে ভাগ করে নিতে পারেন। এটি চলবে, আপনার সহকর্মীদের একই আর সংস্করণ ইনস্টল করা সরবরাহ করে।

  8. অন্য বিকল্পটি হ'ল উবুন্টু, দেবিয়ান বা সেন্টস-এ পুরো প্রকল্পের একটি ধারক তৈরি করা। সুতরাং, আপনার প্রকল্পের বিল্ডের সাথে একটি জিপ ফাইল ভাগ করে নেওয়ার পরিবর্তে, আপনি Dockerআপনার প্রকল্পটি চালানোর জন্য প্রস্তুত দিয়ে পুরো ধারকটি ভাগ করুন ।

আমি rsuiteসম্পূর্ণ প্রজননযোগ্যতার সন্ধানে অনেক পরীক্ষা-নিরীক্ষা করে চলেছি এবং বৈশ্বিক পরিবেশে যে প্যাকেজ ইনস্টল করা হয়েছে তার উপর নির্ভর করে এড়িয়ে চলছি। এটি ভুল কারণ আপনি প্যাকেজ আপডেট ইনস্টল করার সাথে সাথে প্রকল্পটি প্রায়শই কাজ করা বন্ধ করে দেয়, বিশেষত সেই প্যাকেজগুলির সাথে নির্দিষ্ট পরামিতিগুলির সাথে একটি ফাংশনে খুব নির্দিষ্ট কল রয়েছে।

প্রথম জিনিসটি আমি পরীক্ষা করতে শুরু করেছিলাম তা হ'ল bookdownইবুকগুলি। ছয় মাসের বেশি সময়ের পরীক্ষায় টিকে থাকার জন্য বুকডাউন করার মতো ভাগ্যবান আমি কখনও হইনি। সুতরাং, আমি যা করেছি তা হ'ল rsuiteফ্রেমওয়ার্কটি অনুসরণ করতে মূল বুকডাউন প্রকল্পটি রূপান্তর করা । এখন, আমার আমার বিশ্বব্যাপী আর পরিবেশ আপডেট করার বিষয়ে চিন্তা করার দরকার নেই, কারণ deploymentফোল্ডারে প্রকল্পটির নিজস্ব সেট প্যাকেজ রয়েছে ।

পরের কাজটি আমি মেশিন লার্নিং প্রকল্পগুলি তৈরি করছিলাম তবে rsuiteপথে। শীর্ষে একটি মাস্টার, অর্কেস্ট্রেটিং প্রকল্প এবং সমস্ত উপ-প্রকল্প এবং প্যাকেজগুলি মাস্টারের নিয়ন্ত্রণে থাকবে। এটি আপনাকে আর উত্পাদনশীল করে তুলতে আর এর সাথে আপনার কোড করার পদ্ধতিটিকে সত্যিই পরিবর্তন করে।

তার পরে আমি আমার নতুন প্যাকেজ নামে কাজ শুরু করি rTorch। এটি সম্ভব হয়েছিল, বড় অংশে, কারণেই rsuite; এটি আপনাকে ভাবতে এবং বড় হতে দেয়।

যদিও এক টুকরো পরামর্শ। পড়াশোনা rsuiteসহজ নয়। কারণ এটি আর প্রকল্পগুলি তৈরির একটি নতুন উপায় উপস্থাপন করে, এটি শক্ত অনুভব করে। প্রথম প্রয়াসে হতাশ হবেন না, যতক্ষণ না আপনি এটি না করা পর্যন্ত climbালুতে আরোহণ করা চালিয়ে যান। এটির জন্য আপনার অপারেটিং সিস্টেম এবং আপনার ফাইল সিস্টেমের উন্নত জ্ঞান প্রয়োজন।

আমি আশা করি যে একদিন RStudioআমাদের rsuiteমেনু থেকে অর্কেস্ট্রেটিং প্রকল্পগুলি তৈরি করতে দেয় । এটা অসাধারণ হবে.

লিঙ্ক:

RSuite GitHUb রেপো

r4ds বুকডাউন

কেরাস এবং চকচকে টিউটোরিয়াল

moderndive-বুক-rsuite

interpretable_ml-rsuite

IntroMachineLearningWithR-rsuite

ক্লার্ক-intro_ml-rsuite

hyndman-bookdown-rsuite

statistical_rethinking-rsuite

fread এর-benchmarks-rsuite

dataviz-rsuite

খুচরো-সেগমেন্টেশন-H2O-টিউটোরিয়াল

Telco গ্রাহক-মন্থন-টিউটোরিয়াল

sclerotinia_rsuite


-7

ইন্টারেক্টিভ ব্যবহার এবং ছোট স্ক্রিপ্টগুলির জন্য আর ঠিক আছে, তবে আমি এটি কোনও বড় প্রোগ্রামের জন্য ব্যবহার করব না। আমি বেশিরভাগ প্রোগ্রামিংয়ের জন্য একটি মূলধারার ভাষা ব্যবহার করব এবং এটি একটি আর ইন্টারফেসে আবৃত করব।


1
গুরুতরভাবে সেখানে বড় প্যাকেজ রয়েছে (অর্থাত্ প্রোগ্রাম)। আপনি কি গুরুত্ব সহকারে পরামর্শ দিচ্ছেন যে এগুলি অন্য কোনও ভাষায় আবার লেখা উচিত? কেন ???
এডুয়ার্ডো লিওনি

4
একটি বিবেচনা দক্ষতা। আমি প্রায়শই সি কোডটি সি ++ কোড হিসাবে আবারও লিখেছি এবং এটি 100x দ্রুত তৈরি করেছি। আরেকটি হ'ল টুল সাপোর্ট। আর এর সাথে আইলিডির সাথে Eclipse বা ভিজ্যুয়াল স্টুডিওর তুলনা করার মতো কিছুই নেই। অবশেষে, যদি কোনও প্রোগ্রাম খুব বড় হয় তবে এটি সম্ভবত অ-পরিসংখ্যানমূলক কাজগুলি করছে যা আর এর পক্ষে উপযুক্ত নয়।
জন ডি কুক

2
একটি প্লাগইন (স্ট্যাটাস-ইটি) উপলব্ধ রয়েছে যা গ্রহণের সাথে গ্রহটিকে আরের সাথে ইন্টারঅ্যাক্ট করতে দেয় I আমি সম্মত হয়েছি যে সি ++ আর এর চেয়ে অনেক বেশি দ্রুত কাজ করতে পারে But আপনি যদি কোডটি ঘন ঘন পুনরায় ব্যবহার করতে না পারেন তবে দ্রুত কোডটির সুবিধাটি সি ++ এ পুনরায় পুনর্নির্মাণের প্রয়াসের তুলনায় খুব বেশি লাভজনক নয়।
থিয়েরি

2
হ্যাঁ, একটি বাণিজ্য বন্ধ রয়েছে (উত্পাদনশীলতা v কার্য সম্পাদন)। এবং বিশুদ্ধভাবে ডেটা বিশ্লেষণ / পরিসংখ্যানমূলক কাজের জন্য, আর প্রায়শই জয়ী হয়। তবে অন্যান্য কাজগুলি যেমন জিইউআই, ওয়েব ইত্যাদি লেখার জন্য, আমি নিশ্চিত নই যে এটিই কেস। আমরা প্রায়শই প্রোটোটাইপ করি এবং আর তে কাজ করি তবে পাইথন / সি ++ তে প্রোডাকশন কোড স্থাপন করি। আধুনিকতার সাথে আপনি কার্য সম্পাদন এবং বিভিন্ন কাজের জন্য খুব পরিপক্ক এবং পুনরায় ব্যবহারযোগ্য লাইব্রেরি / ফ্রেমওয়ার্ক পাবেন। তবে, এটি একটি তরল পরিস্থিতি এবং আর ইকোসিস্টেমটি প্রতিনিয়ত বিকশিত হচ্ছে।
আর্স

Rcppআর প্রোগ্রামগুলিতে সি ++ কোড সহ প্যাকেজটি ব্যবহার করা বেশ সোজা হয়ে যায়। সুতরাং আর কোডের কিছু অংশ পুনরায় লেখা খুব সহজেই আর এর সাথে সংহত করা যায়। এছাড়াও, আরস্টুডিওর আবির্ভাব আর এর জন্য একটি আইডিই চালু করেছে, ভিজ্যুয়াল স্টুডিওর মতো শক্তিশালী নাও হতে পারে।
পল হিমস্ট্র্রা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.