توثيق الدوال باستخدام roxygen2
اكتب وسوم @param و@return و@examples و@export لإنشاء الوثائق تلقائيًا
توثيق الدوال باستخدام roxygen2 درس مجاني في R Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
ما هو roxygen2؟
يتيح لك roxygen2 كتابة توثيق R مباشرة فوق الدالة على هيئة تعليقات منسقة خصيصًا تبدأ بـ #'. عند تشغيل devtools::document()، يحلل roxygen2 هذه التعليقات وينشئ ملفات man/*.Rd ويحدّث NAMESPACE تلقائيًا.
كتلة roxygen2 الأساسية
تحتاج أبسط كتلة توثيق إلى عنوان ووصف على الأقل. تصبح الجملة الأولى (حتى أول نقطة أو سطر فارغ) العنوان. وتصبح الفقرات اللاحقة الوصف.
# R/add.R
#
# #' Add two numbers
# #'
# #' Computes the sum of x and y. Both arguments must be numeric.
# #'
# #' @export
# add <- function(x, y) {
# x + y
# }وسما @title و@description
استخدم وسمي @title و@description الصريحين عندما لا يكون اصطلاح الفقرة الأولى كافيًا — مثلًا عندما يجب أن يختلف العنوان عن اسم الدالة أو عندما يتكون الوصف من عدة فقرات.
# #' @title Safe Addition of Numeric Values
# #' @description
# #' Adds two numeric vectors element-wise.
# #' Returns NA where either input is NA.
# #' Useful for financial calculations where NA propagation matters.
# #'
# #' @export
# add <- function(x, y) {
# x + y
# }@param — توثيق الوسائط
يوثّق #' @param name Description وسيطًا واحدًا للدالة. استخدم سطر @param واحدًا لكل وسيط. ينبغي أن يوضح الوصف النوع المتوقع وما الذي يتحكم فيه الوسيط.
# #' Add two numbers
# #'
# #' @param x A numeric vector. The first operand.
# #' @param y A numeric vector. The second operand. Must be the same length as x
# #' or length 1 (recycled).
# #'
# #' @export
# add <- function(x, y) {
# if (!is.numeric(x) || !is.numeric(y)) stop('x and y must be numeric')
# x + y
# }@return — توثيق القيمة المعادة
يصف #' @return Description ما تعيده الدالة. حدّد نوع القيمة المعادة وصنفها وبنيتها. وهذا مطلوب لإرسال الحزمة إلى CRAN.
# #' Add two numbers
# #'
# #' @param x A numeric vector.
# #' @param y A numeric vector.
# #' @return A numeric vector of the same length as the longer of x or y,
# #' containing the element-wise sums.
# #'
# #' @export
# add <- function(x, y) x + y@examples — أمثلة شيفرة قابلة للتنفيذ
يوفّر #' @examples شيفرة تظهر في صفحة المساعدة ويشغّلها R CMD check. يجب أن تكتمل الأمثلة في أقل من 5 ثوانٍ وألا تتطلب موارد خارجية (مثل الشبكة أو الملفات). كل سطر هو شيفرة R عادية — ولا يحتاج إلى بادئات خاصة.
# #' Add two numbers
# #'
# #' @param x A numeric vector.
# #' @param y A numeric vector.
# #' @return A numeric vector of element-wise sums.
# #' @examples
# #' add(1, 2)
# #' add(c(1, 2, 3), c(10, 20, 30))
# #' add(0, -5)
# #' @export
# add <- function(x, y) x + y@export — جعل الدوال عامة
يخبر #' @export roxygen2 بإضافة الدالة إلى NAMESPACE، مما يجعلها متاحة لمستخدمي حُزمتك. أما الدوال التي لا تتضمن @export فهي داخلية — يمكن استدعاؤها داخل الحزمة، ولكن لا يمكن للمستخدمين استدعاؤها (من دون :::).
# Public function — exported:
# #' @export
# add <- function(x, y) x + y
#
# Internal helper — not exported:
# check_numeric <- function(x) {
# if (!is.numeric(x)) stop('Expected numeric')
# }
#
# After devtools::document(), NAMESPACE will contain:
# export(add)
# but NOT check_numeric@importFrom — استيراد الدوال
يستورد #' @importFrom pkg fn1 fn2 دوال محددة من حزمة إلى مساحة أسمائك، بحيث يمكنك استدعاءها من دون البادئة pkg::. استخدم ذلك باعتدال — فاستدعاء pkg::fn() صراحةً أوضح ويتجنب تلويث مساحة الأسماء.
# Option 1 — @importFrom (adds to NAMESPACE, no pkg:: needed):
# #' @importFrom stringr str_trim str_to_lower
# clean <- function(x) str_to_lower(str_trim(x))
#
# Option 2 — explicit :: (recommended for clarity):
# clean <- function(x) {
# stringr::str_to_lower(stringr::str_trim(x))
# }
#
# Both work; prefer Option 2 to keep NAMESPACE minimalسير عمل devtools::document()
بعد تحرير تعليقات roxygen2، استدعِ devtools::document() (Ctrl+Shift+D) لإعادة إنشاء man/*.Rd وتحديث NAMESPACE. ثم اعرض صفحة المساعدة باستخدام ?add (بعد load_all()) للتأكد من ظهورها بالشكل الصحيح.
# Full documentation cycle:
# 1. Edit roxygen2 comments in R/add.R
# 2. devtools::document() # regenerate man/ and NAMESPACE
# 3. devtools::load_all() # reload package
# 4. ?add # preview the help page
# 5. devtools::check() # ensure no documentation errorsتوثيق عدة دوال في صفحة واحدة
استخدم #' @rdname shared_name لدمج عدة دوال مترابطة في صفحة مساعدة واحدة. تحصل الدالة الأساسية على كتلة roxygen2 كاملة، بينما تحصل الدوال الثانوية على @rdname و@export فقط.
# R/arithmetic.R
#
# #' Basic Arithmetic
# #' @param x,y Numeric vectors.
# #' @return A numeric vector.
# #' @examples
# #' add(1, 2); subtract(5, 3)
# #' @export
# add <- function(x, y) x + y
#
# #' @rdname add
# #' @export
# subtract <- function(x, y) x - yوسوم أخرى مفيدة
وسوم roxygen2 إضافية لاستكمال التوثيق:
#' @seealso \code{\link{other_fn}}— مرجع تبادلي#' @note— ملاحظات إضافية بعد الوصف#' @author Name— مؤلف الدالة#' @keywords internal— إخفاء الدالة من فهرس الحزمة مع الإبقاء على صفحة المساعدة#' @family group_name— تجميع الدوال المترابطة في المساعدة
# #' Add two numbers
# #' @param x,y Numeric vectors.
# #' @return Numeric vector.
# #' @seealso \code{\link{subtract}} for the inverse operation.
# #' @family arithmetic
# #' @examples
# #' add(1, 1)
# #' @export
# add <- function(x, y) x + yتحقق سريع: وسم @export
ماذا يحدث لدالة في حزمة R تحتوي على توثيق roxygen2 ولكن لا تحتوي على وسم #' @export؟
مراجعة توثيق roxygen2
وسوم roxygen2 الأساسية لتوثيق حزمة R بالكامل:
#' @title/ السطر الأول — عنوان الدالة#' @description— وصف مفصل#' @param name Description— توثيق كل وسيط#' @return Description— وصف القيمة المعادة#' @examples \n code— أمثلة قابلة للتنفيذ (يتحقق منها R CMD check)#' @export— الإضافة إلى NAMESPACE (مما يجعل الدالة عامة)#' @importFrom pkg fn— استيراد دوال محددة- شغّل
devtools::document()لإعادة إنشاء man/ وNAMESPACE
الأسئلة الشائعة
هل درس «توثيق الدوال باستخدام roxygen2» مجاني؟
نعم — نص درس «توثيق الدوال باستخدام roxygen2» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «توثيق الدوال باستخدام roxygen2»؟
اكتب وسوم @param و@return و@examples و@export لإنشاء الوثائق تلقائيًا تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «توثيق الدوال باستخدام roxygen2»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بنية الحزم باستخدام usethis وdevtools
- توثيق الدوال باستخدام roxygen2
- اختبار الوحدات باستخدام testthat
- إرسال الحزم إلى CRAN وصيانتها