কীভাবে রোজিন 2 ব্যবহার করে এস 4 ক্লাসের স্লটগুলি সঠিকভাবে নথিভুক্ত করবেন?


306

রক্সিজেন (2) সহ ক্লাস নথিভুক্ত করার জন্য, শিরোনাম এবং বিবরণ / বিবরণ নির্দিষ্ট করে ফাংশন, পদ্ধতি, ডেটা ইত্যাদির ক্ষেত্রে একই বলে মনে হয় তবে স্লট এবং উত্তরাধিকার তাদের নিজস্ব ধরণের প্রাণী। রোজিন 2 এ এস 4 ক্লাস নথিভুক্ত করার জন্য - বর্তমান বা পরিকল্পিত - সেরা অনুশীলন কী?

যথাযথ অধ্যবসায়:

আমি @slotরক্সিজেনের প্রাথমিক বিবরণগুলিতে একটি ট্যাগের উল্লেখ পেয়েছি। ২০০৮-এর একটি আর-ফরজ মেলিং তালিকার পোস্টটি মনে হচ্ছে যে এটি মৃত, এবং @slotরক্সিজেনে কোনও সমর্থন নেই :

এটি কি রোজিন 2 এর সত্য? পূর্বে উল্লিখিত পোস্টে পরামর্শ দেওয়া হয়েছে যে ব্যবহারকারীর পরিবর্তে লটেক্স মার্কআপের মাধ্যমে তাদের নিজস্ব আইটেমযুক্ত তালিকা তৈরি করা উচিত। উদাহরণস্বরূপ একটি নতুন এস 4 শ্রেণি যা শ্রেণিটি প্রসারিত করে "character"কোড করা হবে এবং এটি নথিভুক্ত হবে:

#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#'    \item{myslot1}{A logical keeping track of something.}
#'
#'    \item{myslot2}{An integer specifying something else.}
#' 
#'    \item{myslot3}{A data.frame holding some data.}
#'  }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
    representation(myslot1="logical",
        myslot2="integer",
        myslot3="data.frame"),
    contains = "character"
)

যাইহোক, যদিও এই কাজ, এই \describe, \itemস্লট দলিল জন্য পদ্ধতির roxygen (2) বাকি সঙ্গে সঙ্গতিহীন বলে মনে হয়, যে সেখানে নেই @-delimited ট্যাগ এবং স্লট থেকে কোন আপত্তি সঙ্গে অনথিভুক্ত যেতে পারে roxygenize()। শ্রেণীর উত্তরাধিকার সংজ্ঞায়িত করার নিয়মিত পন্থা সম্পর্কে এটি কিছুই বলেনি। আমি কল্পনা করি যে নির্ভরতা এখনও সাধারণভাবে ঠিকঠাকভাবে কাজ করে (যদি কোনও নির্দিষ্ট স্লটে অন্য প্যাকেজ থেকে একটি বেস-বেস শ্রেণীর প্রয়োজন হয়) @importট্যাগটি ব্যবহার করে ।

সুতরাং, সংক্ষেপে বলা যায়, রক্সিন (2) স্লটের জন্য বর্তমানের সেরা অনুশীলনটি কী?

এই মুহূর্তে বিবেচনা করার জন্য তিনটি বিকল্প রয়েছে বলে মনে হচ্ছে:

  • উ - আইটেমযুক্ত তালিকা (উপরে উদাহরণ হিসাবে)।
  • বি - @slot... তবে অতিরিক্ত ট্যাগ / প্রয়োগের সাথে আমি মিস করেছি। আমি উপরের উদাহরণে আইটেমযুক্ত তালিকাটির প্রতিস্থাপন হিসাবে যে সংস্করণটি অন্তর্ভুক্ত করা হয়েছিল সেখানে রোলজিন / রোজ অক্সিজেন 2 এর সাথে কাজ করতে আমি স্লটকে অক্ষম করেছিলাম। আবার, উপরোক্ত উদাহরণটি রোজিকান (2) দিয়ে কাজ করে।
  • সি - স্লট নির্দিষ্ট করার জন্য কিছু বিকল্প ট্যাগ, যেমন @paramএকই জিনিসটি সম্পাদন করবে।

আমি গিথুবেরroxygen2 বিকাশের পৃষ্ঠায় যে পোস্টটি করেছি তা থেকে এই প্রশ্নটি ধার করা / প্রসারিত করছি ।


16
@slotসম্ভবত আপনি দীর্ঘমেয়াদী যা চান, তবে এটি প্রথমে বাস্তবায়ন করতে হবে ...
hadley

3
ধন্যবাদ! এটা জানা ভাল. আমি খুশি যে আমার কোডের setClassতুলনায় অনেক কম বিবৃতি রয়েছে setMethod। একবার @slotপ্রয়োগ করা গেলে পরিবর্তন করা খুব বেদনাদায়ক হবে না।
পল ম্যাকমুরডি

8
@ স্লট সম্পর্কে কিছু আলোচনা: github.com/klutometis/rogen/pull/85
ব্রায়ান ডিগস

সংশ্লিষ্ট প্রশ্ন: stackoverflow.com/questions/13642092/...
Joris Meys

2
এস 4 ক্লাস এখন পুরোপুরি Roxygen2 সংস্করণ 3 (উপলব্ধ সমর্থিত হয় GitHub )।
গ্রেগোর টমাস

উত্তর:


29

6.0.1.1 হিসাবে বর্তমান, অক্সিজেন 2 5.0.1 এর জন্য আপডেট উত্তর

এস 4-র জন্য, এখন সেরা অনুশীলনটি @slotট্যাগ ব্যবহার করে ডকুমেন্টিং করা :

#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' @slot myslot1 A logical keeping track of something.
#' @slot myslot2 An integer specifying something else.
#' @slot myslot3 A data.frame holding some data.
#'
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @export

সাইডনোটে, @exportClassকেবলমাত্র কিছু ক্ষেত্রে প্রয়োজনীয়, কোনও ফাংশন রফতানির সাধারণ উপায় @exportএখন ব্যবহার করছে। আপনি অন্যান্য প্যাকেজগুলি ক্লাসটি প্রসারিত করতে সক্ষম না হওয়া পর্যন্ত আপনাকে কোনও শ্রেণি রফতানিও করতে হবে না।

Http://r-pkgs.had.co.nz/namespace.html# এক্সপোর্টগুলিও দেখুন

রায়জেন ২.০.০-এর জন্য আপডেট উত্তর, বর্তমান 5.0.1 হিসাবে।

এস 4-র জন্য, সেরা অনুশীলন হ'ল ফর্মটিতে ডকুমেন্টেশন:

#'  \section{Slots}{
#'    \describe{
#'      \item{\code{a}:}{Object of class \code{"numeric"}.}
#'      \item{\code{b}:}{Object of class \code{"character"}.}
#'    }
#'  }

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

@ ব্রায়ান ডিগস দ্বারা নির্দেশিত হিসাবে, এই বৈশিষ্ট্যটি 3.0.0 এ টানা হয়েছিল, আরও আলোচনা https://github.com/klutometis/ro ऑक्सीजन / সমাপ্তি / 85 এ


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

19

আপনি যদি আরডি ফাইলগুলিতে স্লট ডকুমেন্টিংয়ের জন্য যান তবে ফুল ডিসেন্টের সরবরাহকৃত সমাধানটি ঠিক আছে is ব্যবহার করার সময় roxygen2, আপনি ট্যাগটি @sectionমূলত একই সাথে করতে ব্যবহার করতে পারেন \describe। একটি উদাহরণ:

#' The EXAMPLE class
#'
#' This class contains an example. This line goes into the description
#'
#' This line and the next ones go into the details.
#' This line thus appears in the details as well.
#'
#'@section Slots: 
#'  \describe{
#'    \item{\code{slot1}:}{Matrix of class \code{"numeric"}, containing data from slot1}
#'    \item{\code{slot2}:}{Object of class \code{"character"}, containing data that needs to go in slot2.}
#'  }
#'
#' @note You can still add notes
#' @name EXAMPLE 
#' @rdname EXAMPLE
#' @aliases EXAMPLE-class
#' @exportClass EXAMPLE
#' @author Joris Meys

14

রোজিন 2 ভি 4.1 + এবং হ্যাডলির এটি করার জন্য সর্বশেষ দস্তাবেজ:

http://r-pkgs.had.co.nz/man.html#man-classes

আমি এটি আরসির জন্য এখনও চেষ্টা করে দেখিনি, তবে এটি এখন এস 4 এর জন্য আমার পক্ষে কাজ করে।

পূর্বে

দেখে মনে হচ্ছে যে এস 4 শ্রেণির স্লটগুলি পুরোপুরি Roxy2 সংস্করণ 3.0+ এর অধীনে সমর্থিত:

http://blog.rstudio.org/2013/12/09/roxygen2-3-0-0/

"roxygen2 সঙ্গে আপনার এস 4 ক্লাস, এস 4 পদ্ধতি ও রেসিন শ্রেণীর নথি - আপনি নিরাপদে সমাধান নীচে উপস্থিত ব্যবহার অপসারণ করতে পারেন @aliasএবং @usageএবং নিছক roxygen2 উপর নির্ভর ডান জিনিস করতে।"


2
@ স্লট নিখুঁতভাবে কাজ করে, আপনি এটি ব্যবহার করতে পারেন (বা @ ফিল্ড) একটি এস3 ক্লাস জাল নথি করতে।
ব্র্যান্ডন বার্টেলসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.