R: الصيغة الأساسية للغة R

آخر تحديث: 2026-08-26

في الدرس السابق، قمنا بتثبيت R وRStudio وقمنا بتشغيل أول سطر برمجي لنا cat("Hello"). في هذا الدرس، سنقوم بإتقان «العناصر الأربعة الأساسية في بناء الجمل» في لغة R بشكل شامل — التعليقات، والمتغيرات، وعمليات التعيين، والمخرجات. وسيشكل ذلك الأساس للدروس الـ28 التالية.

تختلف قواعد لغة R إلى حد ما عن قواعد اللغات الأخرى: فالتعليقات تستخدم # بدلاً من //، وعمليات التعيين تستخدم عادةً <- بدلاً من =، وتسلسل السلاسل يستخدم paste() بدلاً من +. إن فهم هذه الاختلافات الأربعة يمثل نصف الطريق نحو النجاح عند كتابة كود لغة R.

1. ما ستتعلمه



2. التعليقات: إضافة «تعليقات» إلى الكود

التعليقات هي نص موجه للقراء البشريين؛ أما مترجم لغة R فييتجاهلها تمامًا. ومع ذلك، فإن التعليقات ليست مجرد «زينة» — بل هي أهم أداة تواصل للمبرمج.

(1) لماذا تعتبر التعليقات مهمة؟

تخيل أنك تعود بعد ستة أشهر لتلقي نظرة على الكود الذي كتبته:

TEXT 📖 للعرض فقط
# Code without comments:
x <- df %>% filter(age > 18) %>% mutate(group = ifelse(score >= 60, "pass", "fail"))

# Code with Comments:
# Filter 18 Adults aged 18 and older,and by score 60 Classified as "Approved"/Failed both groups
x <- df %>% filter(age > 18) %>% mutate(group = ifelse(score >= 60, "pass", "fail"))

هذا الأخير يمكن فهمه على الفور، بينما يستغرق فهم الأول 5 دقائق. هذه هي قيمة التعليقات.

(2) صيغة التعليقات في لغة R

R تعليقات من سطر واحد فقط (باستخدام #)، دون تعليقات مجمعة من نوع /* */:

بناء الجملة مدعوم الوصف
# This is a comment تعليق من سطر واحد — الطريقة الوحيدة التي يدعمها لغة R
/* Multi-line */ لا يتم دعم لغة R؛ سيتم الإبلاغ عن خطأ في بناء الجملة
// Single line R غير مدعوم؛ سيتم إرجاع object '//' not found

(3) كيف أتعامل مع التعليقات متعددة الأسطر؟

لا يدعم لغة R التعليقات متعددة الأسطر بشكل أصلي، ولكن هناك طريقتان للتغلب على ذلك:

R
# Plan 1: Use this on every line # (Recommendations, Standard Practice)
# Line 1 Comments
# Line 2 Comments
# Line 3 Comments
x <- 10

# Plan 2:RStudio Keyboard Shortcuts(Most Commonly Used)
# Select multiple lines of code → Ctrl+Shift+C (macOS: Cmd+Shift+C)
# RStudio Automatically add to each line #,Click again to remove the comment
💡 نصيحة: اعتمد عادةً جيدة تتمثل في «إضافة تعليقات إلى كل سطر من سطور الكود». تظهر الدراسات أنه عندما تعود إلى الكود الذي كتبته بنفسك بعد ستة أشهر، فإن الكود الذي لا يحتوي على تعليقات يكاد يكون من المستحيل فهمه.



3. المتغيرات وقواعد التسمية

المتغيرات هي «حاويات» تُستخدم لتخزين البيانات. لغة R هي لغة ذات أنواع ديناميكية، لذا لا تحتاج إلى إعلان الأنواع مسبقًا؛ بل يمكنك ببساطة تعيين القيم للمتغيرات.

(1) قواعد التسمية (يجب الالتزام بها؛ وإلا سيحدث خطأ)

القاعدة المثال الخاطئ المثال الصحيح السبب
يجب أن يحتوي على أحرف وأرقام وشرطات سفلية ونقاط فقط 2age <- 25 age2 <- 25 لا يجوز أن يبدأ برقم
لا يجوز أن تحتوي على مسافات my name my_name المسافات هي فواصل نحوية في لغة R
لا يمكن استخدام الكلمة الرئيسية R if <- 1 is_if <- 1 if هي كلمة رئيسية تتعلق بتدفق التحكم
حساسية الأحرف الكبيرة والصغيرة Name وname متغيران مختلفان name (كتابة الأحرف الكبيرة بشكل متسق) لغة R حساسة لحالة الأحرف
⚠️ ملاحظة: لغة R تميز بين الأحرف الكبيرة والصغيرة، وهو أحد أكثر الأخطاء شيوعًا. Name وname وNAME هي ثلاثة متغيرات مختلفة تمامًا.

(2) قواعد تسمية الملفات (موصى بها)

هناك قاعدتان رئيسيتان لتسمية المتغيرات في مجتمع R؛ اختر إحداهما والتزم بها:

النمط مثال حالات الاستخدام
snake_case (الشرطات السفلية) user_name، total_count أسلوب tidyverse (موصى به)
dot.case user.name، total.count R الأساسي بالطراز القديم

يستخدم هذا الدليل التعليمي بشكل ثابت أسلوب snake_case (تمشياً مع أسلوب حزم R الحديثة مثل dplyr و ggplot2).

(3) عرض المتغيرات

R
# Assignment
x <- 10
y <- 20

# View a Single Variable
x
# [1] 10

# View All Variables(Equivalent to Environment Pane)
ls()
# [1] "x" "y"
💡 نصيحة: في جزء «البيئة/السجل» في RStudio (أعلى اليمين)، انقر على متغير لمعرفة قيمته — فهذه الطريقة أكثر سهولة بكثير من ls().



4. عامل التعيين: <- مقابل =

يحتوي لغة R على عاملَي تعيين من المستوى الأعلى؛ وهما متكافئان تقريبًا من حيث الوظيفة، لكن يُنصح باستخدام <-.

(1) مقارنة بين أسلوبي الكتابة

البعد <- =
تعيين المستوى الأعلى
إنشاء متغيرات محلية داخل دالة ❌ (يتم تمريرها إلى النطاق الخارجي)
تمرير المعلمات في استدعاءات الدوال ❌ (ينشئ متغيرًا يحمل الاسم نفسه)
قواعد المجتمع ✅ موصى بها رسميًا من قِبل R ❌ قد تسبب التباسًا
سهولة القراءة ✅ يُفهم بوضوح أن المقصود هو «تعيين الطرف الأيمن إلى الطرف الأيسر» ⚠️ قد يحدث خلط مع رمز «اليساوية» الرياضي
R
# Writing Style 1:<-  (Recommendations)
x <- 10

# Writing Style 2:=   (Available but not recommended)
x = 10

(2) التخصيص العكسي -> والتخصيص الشامل <<-

يحتوي لغة R أيضًا على عاملَي تعيين «متقدمين»:

الرمز الغرض مستوى التوصية
x <- 10 التخصيص القياسي (من اليمين إلى اليسار) ✅ موصى به بشدة
10 -> x التعيين العكسي (من اليسار إلى اليمين) ⚠️ لأغراض التعرف فقط عند قراءة الكود القديم
x <<- 10 التعيين العام (يتجاوز نطاق الدالة) ❌ نادرًا ما يُستخدم
⚠️ ملاحظة: في عملية التطوير الفعلية، نادرًا ما يُستخدم كل من <<- و->. وبصفتك مبتدئًا، ما عليك سوى استخدام <-.

(3) أهمية المسافات: <- مقابل < -

R
# Correct: Assignment
x <- 10

# Error: This is "less-than sign" Plus "negative 10" (Comparison x and -10)
x < -10
⚠️ ملاحظة: يجب أن تكون <- محاطة بمسافات؛ وإلا فسيتم تفسيرها على أنها عامل مقارنة. وقد يؤدي فقدان مسافة واحدة فقط إلى فرق كبير.



5. دوال الإخراج: print() مقابل cat()

يحتوي لغة R على دالتين شائعتين للإخراج، تخدمان أغراضًا مختلفة.

(1) جدول يوضح الاختلافات في لمحة سريعة

الخصائص print() cat()
علامات الاقتباس عرض "Alice" عدم العرض Alice
فهرس المتجهات إظهار [1] 1 2 3 إخفاء 1 2 3
تسلسل متعدد المعلمات ❌ يتطلب paste() ✅ تسلسل مباشر
فاصل سطر فاصل سطر تلقائي مطلوب فاصل سطر يدوي \n
الاستدعاء التلقائي ✅ عند إدخال كائن مباشرةً في وحدة التحكم ❌ يجب استدعاؤه صراحةً
حالات الاستخدام تصحيح الأخطاء، المراقبة إنشاء التقارير، النص

(2) عرض توضيحي مباشر

R
name <- "Alice"
age <- 25

# print() -- General Output (with [1] and quotation marks)
print(name)
# [1] "Alice"

# cat() —— Concatenated Output(Recommendations,More flexible)
cat("Name:", name, ",Age:", age, "\n")
# Name: Alice ,Age: 25

(3) وظائف الإخراج الأخرى

الوظيفة الغرض حالات الاستخدام
message() رسالة عادية (يمكن إخفاؤها باستخدام suppressMessages()) موجه التقدم للنصوص الطويلة
warning() تحذير (لا يوقف البرنامج) يشير إلى وجود خطر لكن التنفيذ يستمر
stop() خطأ (انقطاع البرنامج) خطأ فادح؛ يجب معالجته بواسطة tryCatch()
💡 نصيحة: في هذا الدرس التعليمي، استخدم cat() لإخراج الرسائل النصية واستخدم print() لتصحيح الأخطاء وعرض قيم المتغيرات.



6. دليل العمل

عند بدء تشغيل R، يدخل البرنامج إلى دليل العمل بشكل افتراضي، وتتم جميع عمليات قراءة الملفات وكتابتها هناك.

(1) أهمية دليل العمل

100%
graph LR
    A["R Process"] --> B["Working Directory<br/>(work dir)"]
    B --> C["data/sales.csv<br/>(Relative Path = ./data/sales.csv)"]
    B --> D["scripts/clean.R<br/>(Relative Path)"]
    B --> E["output/report.html<br/>(Relative Path)"]
    
    style A fill:#fff3cd
    style B fill:#d4edda

إذا كان دليل العمل غير صحيح، فلن يتمكن read_csv("data/sales.csv") من العثور على الملف.

(2) عرض دليل العمل وتعيينه

R
# View the current working directory
getwd()
# [1] "C:/Users/Alice/Documents"

# Set the working directory (Use / or \\, Do not use \)
setwd("C:/Users/Alice/Projects/my_r_project")

(3) النهج الموصى به: مشروع RStudio

إن القيام بذلك يدويًّا setwd() يعرضك لخطر حدوث أخطاء (قد تحدث مشكلات إذا كان المسار يحتوي على أحرف صينية أو مسافات). نوصي باستخدام مشروع RStudio:

الميزة الوصف
الإعدادات التلقائية افتح ملف .Rproj؛ حيث يتم تعيين دليل العمل تلقائيًا على الدليل الجذري للمشروع
مشروع الاستقلالية لكل مشروع مجموعة خاصة به من سجلات .R وبيئته وحزم البرامج، دون أي تداخل بينها
قابل للنقل إرسال مجلد المشروع بأكمله إلى الآخرين دون حدوث تعارضات في المسارات
متوافق مع Git أفضل الممارسات لدمج مشاريع RStudio مع Git
100%
graph LR
    A["File → New Project"] --> B["Select New Directory → New Project"]
    B --> C["Enter the project name r-tutorial"]
    C --> D["RStudio Create .Rproj Documents"]
    D --> E["Open later .Rproj<br/>Automatic Working Directory Setup"]
💡 نصيحة: بالنسبة لجميع الأمثلة الواردة في هذا الدرس، يُنصح بشدة بإنشاء مشروع RStudio جديد (مثل r-tutorial) ووضع جميع ملفات البرامج النصية .R بداخله.



7. التنفيذ عبر سطر الأوامر: Rscript

إذا كنت ترغب في تشغيل نصوص R (لأغراض الأتمتة أو المهام المجدولة أو الخلفية للويب) دون فتح RStudio، فاستخدم Rscript.

(1) إنشاء برنامج نصي

أنشئ ملفًا جديدًا باسم hello.R في أي مكان:

R
# hello.R
cat("Hello, World!\n")

(2) التشغيل من سطر الأوامر

افتح المحطة الطرفية (cmd / PowerShell في نظام Windows، و«Terminal» في نظامي macOS وLinux)، وقم بتشغيل الأمر التالي:

BASH
Rscript hello.R

النتيجة المتوقعة:

TEXT 📖 للعرض فقط
Hello, World!
💡 نصيحة: يُستخدم Rscript على نطاق واسع في سيناريوهات مثل CI/CD، وخطوط نقل البيانات، وواجهات برمجة التطبيقات على الويب (R Plumber)، وهو أمر يجب على كل مهندس R إتقانه.



8. مثال كامل: تدريب شامل على قواعد النحو الأساسية

فيما يلي مثال على مسار عمل كامل يربط بين جميع المفاهيم التي تم تناولها في هذا الدرس.

▶ مثال: برنامج نصي لإدارة معلومات الطلاب

R
# ============================================
# Student Information Management Script
# File Name:student.R
# ============================================

# 1. Notes:Script Description
# Author:Alice
# Features:Define student information and output it
# Date:2026-07-02

# 2. Variable Assignment (Use <- No need =)
student_name <- "Alice"
student_age <- 20
student_score <- 95.5
is_passed <- TRUE

# 3. Use cat() Output (Recommendations, Flexible Assembly)
cat("=== Student Information ===\n")
cat("Name:", student_name, "\n")
cat("Age:", student_age, "\n")
cat("Score:", student_score, "\n")
cat("Did I pass?:", is_passed, "\n")

# 4. Use print() Debugging (with [1] Index)
print(student_name)
print(student_score)

# 5. Simple Calculations
final_score <- student_score * 0.6 + 100 * 0.4  # 60% End of Term + 40% Usually
cat("\nFinal Results(60% End of Term + 40% Usually):", round(final_score, 2), "\n")

# 6. Delete Variable(Use with caution)
rm(student_name, student_age, student_score, is_passed, final_score)
▶ جرّب الكود

النتيجة المتوقعة:

TEXT 📖 للعرض فقط
=== Student Information ===
Name: Alice
Age: 20
Grades: 95.5
Did I pass?: TRUE
[1] "Alice"
[1] 95.5

Final Results(60% End of Term + 40% Usually): 97.3

(1) الإجراء

الخطوة الإجراء الوصف
1 إنشاء مشروع RStudio r-basics File → New Project
2 إنشاء student.R في المشروع Ctrl+Shift+N
3 انسخ الكود أعلاه الصق الكود بالكامل
4 تحديد الكل → Ctrl+Enter إرسال إلى وحدة التحكم
5 عرض النتيجة في وحدة التحكم رؤية 5 أسطر من «معلومات الطالب»


❓ أسئلة شائعة

س ما الفرق بين x <- 10 وx < -10؟
ج انتبه إلى المسافات! x <- 10 عبارة عن عملية تعيين (تعيين القيمة 10 لـ x)، بينما x < -10 عبارة عن مقارنة (التحقق مما إذا كان x أقل من -10). إن نسيان مسافة واحدة يحدث فرقًا كبيرًا. اعتمد عادة إضافة مسافات قبل وبعد <-.

📖 ملخص


📝 تمارين

  1. تمرين أساسي: أنشئ نصوصًا برمجية جديدة في RStudio وحدد خمسة متغيرات لتخزين نص (name)، وعمرك (age)، ووزنك (weight، رقم عائم)، وما إذا كنت طالبًا (is_student، قيمة منطقية)، ومدينتك (city). استخدم cat() لربطها معًا في الناتج: «أنا [name]، عمري [age] سنة، وزني [weight] كجم، أعيش في [city]، و[is_student] ما زلت في المدرسة.» التقط لقطة شاشة بعد تشغيل البرنامج النصي واحفظها.

  2. تمرين أساسي: أنشئ مشروعًا جديدًا في RStudio باسم r-basics. داخل المشروع، أنشئ برنامجًا نصيًّا باسم variables.R وحدد خمسة متغيرات من أنواع مختلفة (رقمي، حرفي، منطقي، معقد، وفارغ NA). استخدم typeof() للتحقق من نوع كل متغير، وقم بالتقاط لقطة شاشة لنتائج كل من الأوامر الخمسة typeof() واحفظها.

  3. مشكلة متقدمة: اكتب برنامجًا نصيًّا يقوم بما يلي: ① يستخدم paste() لربط "Hello" و"World" معًا لتكوين "Hello-World" (sep = "-")؛ ② يستخدم cat() لطباعة النتيجة؛ ③ يستخدم nchar() للتحقق من طول السلسلة المجمعة. بعد تشغيل البرنامج النصي، التقط لقطة شاشة واحفظ مخرجات وحدة التحكم.

  4. التحدي: اكتب برنامجًا نصيًّا بلغة R يقوم بما يلي: ① استخدم setwd() لتغيير دليل العمل إلى tempdir() (الدليل المؤقت لـ R)؛ ② استخدم getwd() لعرض دليل العمل الحالي؛ ③ استخدم save.image() لحفظ مساحة العمل في my_workspace.RData؛ ④ استخدم rm(list = ls()) لمسح جميع المتغيرات؛ ⑤ استخدم load("my_workspace.RData") لإعادة التحميل. تحقق من أن جميع المتغيرات لا تزال موجودة بعد إعادة التحميل. بعد تشغيل البرنامج النصي، التقط لقطة شاشة واحفظ الناتج الكامل لجميع الخطوات الخمس.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%