আর এর মধ্যে "এস 3 পদ্ধতি" এর অর্থ কী?


124

যেহেতু আমি আর-তে মোটামুটি নতুন, আমি জানি না যে এস 3 পদ্ধতি এবং অবজেক্টগুলি কী। আমি দেখতে পেয়েছি যে সেখানে এস 3 এবং এস 4 অবজেক্ট সিস্টেম রয়েছে এবং কেউ কেউ সম্ভব হলে এস 4 এর ওপরে এস 3 ব্যবহার করার পরামর্শ দেন ( http://google-styleguide.googlecode.com/svn/trunk/google-r-style এ গুগলের আর স্টাইল গাইড দেখুন। এইচটিএমএল ) *। তবে আমি এস 3 পদ্ধতি / অবজেক্টের সঠিক সংজ্ঞাটি জানি না।

আপডেট: 2019 হিসাবে গুগলের আর স্টাইল গাইড হাইপারলিঙ্ক এখন এখানে

উত্তর:


85

বেশিরভাগ প্রাসঙ্গিক তথ্য সন্ধান করে ?S3বা খুঁজে পাওয়া যায় ?UseMethodতবে সংক্ষেপে:

এস 3 পদ্ধতি প্রেরণের একটি স্কিম বোঝায়। আপনি কিছুদিনের জন্য আর ব্যবহার করে থাকেন, আপনি আছে বিজ্ঞপ্তি পাবেন print, predictএবং summaryঅবজেক্টের বিভিন্ন ধরণের অনেক জন্য পদ্ধতি।

এস 3 এ, এটি এর দ্বারা কাজ করে:

  • সুদের অবজেক্টের শ্রেণি নির্ধারণ (উদাহরণস্বরূপ: পদ্ধতিতে একটি কলের ফেরতের মান glmবর্গ রয়েছে glm)
  • সাধারণ নাম (যেমন সঙ্গে একটি পদ্ধতি প্রদান printclassname), তারপর একটি বিন্দু, এবং তারপর (উদাহরণ: print.glm)
  • এই কাজ করার জন্য এই সাধারণ নামটি ( print) এর জন্য কিছু প্রস্তুতি নেওয়া উচিত ছিল , তবে আপনি যদি কেবল বিদ্যমান পদ্ধতির নামগুলির সাথে নিজেকে সামঞ্জস্য করতে দেখেন তবে আপনার এটির দরকার নেই (আপনি যদি সাহায্য করেন তবে আমি আগে যে সাহায্যটি দেখেছি তা দেখুন) )।

দর্শকের চোখে, এবং বিশেষ করে, আপনার নতুন তৈরি করা ভীতু মডেল ফিটিং প্যাকেজের ব্যবহারকারী, এটা অনেক বেশি সুবিধাজনক টাইপ করতে পাবে কোথায় করতে predict(myfit, type="class")চেয়ে predict.mykindoffit(myfit, type="class")

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


54

আপনাকে এস 3 দিয়ে শুরু করতে medianফাংশনের কোডটি দেখুন । medianকমান্ড প্রম্পটে টাইপ করা থেকে জানা যায় যে এটির শরীরে একটি লাইন রয়েছে, যথা

UseMethod("median")

তার মানে এটি একটি এস 3 পদ্ধতি। অন্য কথায়, আপনি medianবিভিন্ন এস 3 ক্লাসের জন্য আলাদা ফাংশন রাখতে পারেন । সমস্ত সম্ভাব্য মিডিয়ান পদ্ধতি তালিকাভুক্ত করতে টাইপ করুন

methods(median) #actually not that interesting.  

এই ক্ষেত্রে, কেবলমাত্র একটি পদ্ধতি আছে, ডিফল্ট, যাকে যে কোনও কিছুর জন্য বলা হয়। আপনি টাইপ করে এর জন্য কোড দেখতে পারেন

median.default

আরও একটি আকর্ষণীয় উদাহরণ printফাংশন, যার বিভিন্ন পদ্ধতি রয়েছে।

methods(print)  #very exciting

লক্ষ্য করুন যে কয়েকটি পদ্ধতিতে *তাদের নামের পাশে রয়েছে। এর অর্থ হ'ল এগুলি কিছু প্যাকেজের নেমস্পেসের মধ্যে লুকিয়ে রয়েছে। findতারা কোন প্যাকেজে রয়েছে তা খুঁজে পেতে ব্যবহার করুন For উদাহরণস্বরূপ

find("acf")  #it's in the stats package
stats:::print.acf

39

Http://adv-r.had.co.nz/OO-essentials.html থেকে :

আর এর তিনটি ওও সিস্টেম শ্রেণি এবং পদ্ধতিগুলি কীভাবে সংজ্ঞায়িত করা হয় তার মধ্যে পৃথক:

  • এস 3 জেনেরিক-ফাংশন ওও নামক ওও প্রোগ্রামিংয়ের একটি স্টাইল প্রয়োগ করে। এটি জাভা, সি ++ এবং সি # এর মতো বেশিরভাগ প্রোগ্রামিং ভাষার থেকে পৃথক, যা বার্তা প্রেরণকারী ওও বাস্তবায়ন করে। বার্তা প্রেরণের সাথে সাথে বার্তাগুলি (পদ্ধতিগুলি) অবজেক্টগুলিতে প্রেরণ করা হয় এবং অবজেক্টটি কোন ফাংশনটি কল করতে হবে তা নির্ধারণ করে। সাধারণত, মেথড কলটিতে এই অবজেক্টটির একটি বিশেষ উপস্থিতি থাকে, সাধারণত পদ্ধতি / বার্তার নামের আগে উপস্থিত হয়: উদাহরণস্বরূপ ক্যানভাস.ড্রেআরেক্ট ("নীল")। এস 3 আলাদা। গণনাগুলি এখনও পদ্ধতির মাধ্যমে পরিচালিত হয়, জেনেরিক ফাংশন নামে পরিচিত একটি বিশেষ ধরণের ফাংশন কোন পদ্ধতিটি কল করতে পারে তা সিদ্ধান্ত নেয়, যেমন, ড্রআরেক্ট (ক্যানভাস, "নীল")। এস 3 একটি খুব নৈমিত্তিক সিস্টেম। এটির ক্লাসগুলির কোনও আনুষ্ঠানিক সংজ্ঞা নেই।

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

  • সংক্ষেপে আরসি নামে পরিচিত রেফারেন্স ক্লাসগুলি এস 3 এবং এস 4 থেকে বেশ আলাদা। আরসি মেসেজ-পাসিং ওও প্রয়োগ করে, তাই পদ্ধতিগুলি ক্লাসের অন্তর্ভুক্ত, ফাংশন নয়। objects অবজেক্ট এবং পদ্ধতিগুলি পৃথক করতে ব্যবহৃত হয়, সুতরাং পদ্ধতি কলগুলি ক্যানভাসের মতো দেখায় $ ড্র্যরেক্ট ("নীল")। আরসি অবজেক্টগুলিও পরিবর্তনযোগ্য: তারা আর-এর সাধারণ কপি-অন-মডিফাই শব্দার্থক শব্দ ব্যবহার করে না, তবে জায়গায় পরিবর্তিত হয় ified এটি তাদের পক্ষে যুক্তিযুক্ত হতে শক্ত করে তবে এস 3 বা এস 4 এর মাধ্যমে সমাধান করা কঠিন এমন সমস্যাগুলি সমাধান করার অনুমতি দেয়।

আরও একটি সিস্টেম রয়েছে যা বেশ ওও নয়, তবে এখানে উল্লেখ করা জরুরী:

  • বেস ধরণের, অভ্যন্তরীণ সি-স্তরের প্রকারগুলি যা অন্যান্য ওও সিস্টেমগুলিকে আচ্ছাদন করে। বেস প্রকারগুলি বেশিরভাগ সি কোড ব্যবহার করে চালিত হয় তবে এগুলি সম্পর্কে জানা গুরুত্বপূর্ণ কারণ তারা অন্যান্য ওও সিস্টেমগুলির জন্য বিল্ডিং ব্লক সরবরাহ করে।

11

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


10

চেষ্টা

methods(residuals)

যা অন্যদের মধ্যে "রেসিডুয়াল.এলএম" এবং "রেসিডুয়ালস এলএম" তালিকাভুক্ত করে। এর অর্থ যখন আপনি একটি লিনিয়ার মডেল, মি, এবং টাইপ করেনresiduals(m), residouts.lm কল করা হবে। আপনি যখন একটি জেনারেলাইজড লিনিয়ার মডেল লাগিয়েছেন, তখন অবশিষ্টগুলি.glm কল করা হবে। এটি এক ধরণের সি ++ অবজেক্টের মডেলটিকে উল্টো দিকে পরিণত হয়েছিল। সি ++ এ আপনি একটি বেস ক্লাসটি ভার্চুয়াল ফাংশনগুলি সংজ্ঞায়িত করেন, যা উত্পন্ন শ্রেণিবদ্ধ দ্বারা ওভাররাইড হয়। আর-তে আপনি ভার্চুয়াল (ওরফে জেনেরিক) ফাংশনটি সংজ্ঞায়িত করেন এবং তারপরে আপনি সিদ্ধান্ত নিবেন কোন ক্লাসগুলি এই ফাংশনটিকে ওভাররাইড করবে (ওরফে কোনও পদ্ধতি নির্ধারণ)। মনে রাখবেন যে এটি করা ক্লাসগুলি একটি সাধারণ সুপার ক্লাস থেকে নেওয়া উচিত নয়। আমি সাধারণত এস 4 এর চেয়ে এস 3 পছন্দ করতে সম্মত হই না। এস 4 এর আরও আনুষ্ঠানিকতা রয়েছে (= আরও টাইপিং) এবং এটি কিছু অ্যাপ্লিকেশনের জন্য খুব বেশি হতে পারে। এস 4 ক্লাসগুলি অবশ্য C ++ এ শ্রেণি বা কাঠামোর মতো নির্ধারণ করা যেতে পারে। আপনি উল্লেখ করতে পারেন যে একটি নির্দিষ্ট শ্রেণীর একটি বস্তু একটি স্ট্রিং এবং দুটি সংখ্যার সমন্বয়ে তৈরি করা হয় উদাহরণস্বরূপ:

setClass("myClass", representation(label = "character", x = "numeric", y = "numeric"))

যে শ্রেণীর একটি অবজেক্টের সাথে ডাকা পদ্ধতিগুলি সেই সদস্যগুলির সাথে থাকা বস্তুর উপর নির্ভর করতে পারে। এটি এস 3 ক্লাসের থেকে খুব আলাদা, যা কেবল একগুচ্ছ উপাদানগুলির একটি তালিকা।

এস 3 এবং এস 4 এর সাহায্যে আপনি সদস্য ফাংশনটি কল করেন fun(object, args)এবং দ্বারা নয় object$fun(args)। আপনি যদি পরবর্তীকালের মতো কিছু খুঁজছেন তবে প্রোটো প্যাকেজটি দেখুন।


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

3

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

উন্নত আর বইয়ের কভার

2015 থেকে প্রথম সংস্করণ একটি ওয়েব উপস্থাপনা করেছেন এখানে OO যেমন পণ্য সংশ্লিষ্ট অধ্যায়ে সঙ্গে, এখানে

ওও সিস্টেমগুলিতে পন্থা

হ্যাডলি ওও প্রোগ্রামিংয়ের দুটি স্বতন্ত্র পদ্ধতির পার্থক্য করার জন্য নিম্নলিখিতটি সংজ্ঞায়িত করেছেন:

কার্যকরী ওওপি : পদ্ধতিগুলি (কলযোগ্য কোড টুকরা) জেনেরিক ফাংশনের অন্তর্ভুক্ত (জাভা / সি # জেনেরিক পদ্ধতিগুলির সাথে বিভ্রান্ত হওয়ার দরকার নেই )। একটি বৈশ্বিক অনুসন্ধান সারণীতে অবস্থিত হিসাবে পদ্ধতিগুলি সম্পর্কে ভাবুন। সঞ্চালনের পদ্ধতিটি রানটাইম সিস্টেমে ফাংশনের নাম এবং সেই ফাংশনে পাস হওয়া এক বা একাধিক আর্গুমেন্টের ধরণের (বা অবজেক্ট শ্রেণি) ভিত্তিতে পাওয়া যায় (এটিকে "পদ্ধতি প্রেরণ" বলা হয়)। সিনট্যাক্স প্রজ্ঞাময়, পদ্ধতি কল সাধারণ ফাংশান কল মত চেহারা হতে পারে: myfunc(object, arg1, arg2)। এই কলটি জোড় ("মাইফাঙ্ক", টাইফফ (অবজেক্ট)) বা সম্ভবত ("মাইফাঙ্ক", টাইপফ (অবজেক্ট), টাইপফ (আরজি 1), টাইফফ (আরজি 2) এর সাথে সম্পর্কিত পদ্ধতির সন্ধানের জন্য রানটাইমকে নেতৃত্ব দেবেযদি ভাষা এটি সমর্থন করে। আর এর এস 3 এ, জেনেরিক ফাংশনের পুরো নামটি (ফাংশন-নাম, শ্রেণি) জুটি দেয়। উদাহরণস্বরূপ: mean.Dateতারিখগুলির গড় গণনা করার পদ্ধতি। methods("mean")ফাংশন নাম সহ জেনেরিক পদ্ধতিগুলি তালিকাভুক্ত করার চেষ্টা করুন mean। কার্যকরী ওওপি পদ্ধতির উদাহরণ ও ও অগ্রগামী স্মার্টটাক , কমন লিস্প অবজেক্ট সিস্টেম এবং জুলিয়াতে পাওয়া যায় । হ্যাডলি নোট করেছেন যে "আর এর তুলনায় জুলিয়ার বাস্তবায়ন পুরোপুরি বিকাশিত এবং অত্যন্ত পারফরম্যান্ট।"

এনক্যাপসুলেটেড ওওপি : পদ্ধতিগুলি অবজেক্ট বা ক্লাসের অন্তর্ভুক্ত এবং পদ্ধতি কলগুলি সাধারণত দেখায় object.method(arg1, arg2)। এটিকে এনক্যাপসুলেটেড বলা হয় কারণ অবজেক্টটি ডেটা (ক্ষেত্র) এবং আচরণ (পদ্ধতি) উভয়কেই এনপ্যাপুলেট করে । অবজেক্টের সাথে সংযুক্ত একটি লুকিং টেবিল বা অবজেক্টের শ্রেণির বিবরণ হিসাবে পদ্ধতিটি ভাবুন। রানটাইম পদ্ধতিটির নাম এবং সম্ভবত এক বা একাধিক আর্গুমেন্টের ধরণের ভিত্তিতে পদ্ধতিটিকে দেখায়। সি ++, জাভা, সি # এর মতো "জনপ্রিয়" ওও ভাষাগুলিতে এটি পাওয়া যায়।

উভয় ক্ষেত্রেই যদি উত্তরাধিকার সমর্থিত হয় (এটি সম্ভবত), রানটাইমটি ক্লাস হায়ারার্কিকে উপরের দিকে অতিক্রম করতে পারে যতক্ষণ না এটি কল লুকিং কীটির সাথে কোনও মিল খুঁজে পায়।

কোনও R বিষয়বস্তু কোন সিস্টেমের অন্তর্গত তা কীভাবে সন্ধান করা যায়

library(sloop) # formerly, "pryr"
otype(mtcars)
#> [1] "S3"

আর অবজেক্ট সিস্টেম

এস 3

  • কার্যকরী ওওপি পদ্ধতির।
  • হ্যাডলি অনুসারে সর্বাধিক গুরুত্বপূর্ণ সিস্টেম।
  • সর্বাধিক সাধারণ। আর দ্বারা ব্যবহৃত প্রথম ওও সিস্টেম
  • বেস আর এর সাথে আসে, পুরো আর-এর জুড়ে ব্যবহৃত হয়
  • গ্যারান্টি প্রয়োগের পরিবর্তে সম্মেলনের উপর নির্ভর করে।
  • দেখুন চেম্বারস, জন এম, এবং ট্রেভর জে Hastie। 1992. "এস মধ্যে পরিসংখ্যানের মডেলগুলি" ওয়েডসওয়ার্থ এবং ব্রুকস / কোল অ্যাডভান্সড বুকস অ্যান্ড সফটওয়্যার।
  • ইন বিশদ "উন্নত আর, 2nd সংস্করণ" এখানে

এস 4

  • কার্যকরী ওওপি পদ্ধতির।
  • হ্যাডলি অনুসারে তৃতীয় গুরুত্বপূর্ণ সিস্টেম।
  • এস 3 এর পুনর্লিখন, সুতরাং এস 3 এর অনুরূপ, তবে আরও আনুষ্ঠানিক এবং আরও কঠোর: এটি আপনাকে প্রোগ্রামের নকশা সম্পর্কে সাবধানতার সাথে চিন্তা করতে বাধ্য করে। বৃহত সিস্টেমগুলি তৈরির জন্য উপযুক্ত (যেমন বায়োকন্ডাক্টর প্রকল্প)।
  • বেস "পদ্ধতি" প্যাকেজে কার্যকর করা হয়েছে।
  • দেখুন: চেম্বারস, জন এম 1998. "প্রোগ্রামিং উইথ ডেটা: এস ল্যাঙ্গুয়েজ এ গাইড"। স্প্রিঙ্গের।
  • ইন বিশদ "উন্নত আর, 2nd সংস্করণ" এখানে

আরসি ওরফে "রেফারেন্স ক্লাস"

  • এনকেপসুলেটেড ওওপি পদ্ধতির।
  • বেস আর নিয়ে আসে
  • এস 4 এর উপর ভিত্তি করে।
  • আরসি অবজেক্টস হ'ল বিশেষ ধরণের এস 4 অবজেক্ট যা "পরিবর্তনযোগ্য "ও হয় are অর্থাত্ আর-এর স্বাভাবিক কপিরাইট অন-মডিফাইটি শব্দার্থক ব্যবহারের পরিবর্তে সেগুলিকে স্থানে পরিবর্তন করা যেতে পারে। নোট করুন যে পরিবর্তনীয় স্থিতি সম্পর্কে বিতর্ক করা শক্ত এবং কুৎসিত বাগের উত্স তবে নির্দিষ্ট অ্যাপ্লিকেশনগুলিতে আরও দক্ষ কোড তৈরি করতে পারে।

R6

  • এনকেপসুলেটেড ওওপি পদ্ধতির।
  • হ্যাডলি অনুসারে দ্বিতীয় সবচেয়ে গুরুত্বপূর্ণ সিস্টেম।
  • আর 6 প্যাকেজে পাওয়া যাবে (এর সাথে ইনস্টল করুন library(R6))
  • আরসির মতো, তবে হালকা এবং আরও দ্রুত: এটি এস 4 বা পদ্ধতি প্যাকেজের উপর নির্ভর করে না । আর পরিবেশের উপরে নির্মিত। এছাড়াও আছে:
    • সরকারী এবং ব্যক্তিগত পদ্ধতি
    • সক্রিয় বাঁধাই (ক্ষেত্রগুলি, এটি যখন অ্যাক্সেস করা হয়, আসলে কোনও পদ্ধতিতে কল করে)
    • বর্গ উত্তরাধিকার যা প্যাকেজ জুড়ে কাজ করে
    • উভয় শ্রেণীর পদ্ধতি (কোড যে বর্গ জন্যে এবং মাধ্যমে একটি দৃষ্টান্ত অ্যাক্সেস করতে পারেন self, private, super) এবং সদস্য ফাংশন (ক্ষেত্র নির্ধারিত ফাংশন, কিন্তু যা পদ্ধতি নয়, শুধু ফাংশন)
  • আর এর "কপিরাইট অন-মডিফাই" শব্দার্থবিজ্ঞানের হাত থেকে বাঁচার একটি মানক উপায় সরবরাহ করে
  • প্যাকেজ সাইটটি দেখুন: "আর 6: আর এর জন্য এনক্যাপসুলেটেড অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং"
  • ইন বিশদ "উন্নত আর, 2nd সংস্করণ" এখানে

অন্যান্য

সেখানে অন্যদের মতো R.oo (রেসিন অনুরূপ), প্রোটো (প্রোটোটাইপ-ভিত্তিক, জাভাস্ক্রিপ্ট মনে) এবং Mutatr । তবে, "অ্যাডভান্সড আর" বলেছেন:

আর 6 ছাড়াও, যা বহুল ব্যবহৃত হয়, এই সিস্টেমগুলি মূলত তাত্ত্বিক আগ্রহের। তাদের ক্ষমতা আছে তবে কয়েকটি আর ব্যবহারকারী তাদের এগুলি জানেন এবং বুঝতে পারেন, তাই অন্যদের পক্ষে আপনার কোডটি পড়া এবং অবদান করা শক্ত hard

ওপর অধ্যায়টি পড়তে ভুলবেন না বিনিময় প্রথা মধ্যে "উন্নত আর, 2nd সংস্করণ" , অত্যধিক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.