R: الصيغة الأساسية للغة R
آخر تحديث: 2026-08-26
في الدرس السابق، قمنا بتثبيت R وRStudio وقمنا بتشغيل أول سطر برمجي لنا
cat("Hello"). في هذا الدرس، سنقوم بإتقان «العناصر الأربعة الأساسية في بناء الجمل» في لغة R بشكل شامل — التعليقات، والمتغيرات، وعمليات التعيين، والمخرجات. وسيشكل ذلك الأساس للدروس الـ28 التالية.
تختلف قواعد لغة R إلى حد ما عن قواعد اللغات الأخرى: فالتعليقات تستخدم # بدلاً من //، وعمليات التعيين تستخدم عادةً <- بدلاً من =، وتسلسل السلاسل يستخدم paste() بدلاً من +. إن فهم هذه الاختلافات الأربعة يمثل نصف الطريق نحو النجاح عند كتابة كود لغة R.
1. ما ستتعلمه
- كيفية كتابة التعليقات المكونة من سطر واحد والتعليقات المكونة من عدة أسطر في لغة R
- قواعد تسمية المتغيرات وأفضل الممارسات المتعلقة بها
- الاختلافات بين عوامل التعيين الأربعة (
<-=-><<-) - الاختلافات بين دالتَي الإخراج
print()وcat() - مفهوم الدليل العملي واستخدام مشاريع RStudio
Rscriptتشغيل نصوص R من سطر الأوامر
2. التعليقات: إضافة «تعليقات» إلى الكود
التعليقات هي نص موجه للقراء البشريين؛ أما مترجم لغة R فييتجاهلها تمامًا. ومع ذلك، فإن التعليقات ليست مجرد «زينة» — بل هي أهم أداة تواصل للمبرمج.
(1) لماذا تعتبر التعليقات مهمة؟
تخيل أنك تعود بعد ستة أشهر لتلقي نظرة على الكود الذي كتبته:
# 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 التعليقات متعددة الأسطر بشكل أصلي، ولكن هناك طريقتان للتغلب على ذلك:
# 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 حساسة لحالة الأحرف |
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) عرض المتغيرات
# Assignment
x <- 10
y <- 20
# View a Single Variable
x
# [1] 10
# View All Variables(Equivalent to Environment Pane)
ls()
# [1] "x" "y"
ls().
4. عامل التعيين: <- مقابل =
يحتوي لغة R على عاملَي تعيين من المستوى الأعلى؛ وهما متكافئان تقريبًا من حيث الوظيفة، لكن يُنصح باستخدام <-.
(1) مقارنة بين أسلوبي الكتابة
| البعد | <- |
= |
|---|---|---|
| تعيين المستوى الأعلى | ✅ | ✅ |
| إنشاء متغيرات محلية داخل دالة | ✅ | ❌ (يتم تمريرها إلى النطاق الخارجي) |
| تمرير المعلمات في استدعاءات الدوال | ❌ (ينشئ متغيرًا يحمل الاسم نفسه) | ✅ |
| قواعد المجتمع | ✅ موصى بها رسميًا من قِبل 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) أهمية المسافات: <- مقابل < -
# 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) عرض توضيحي مباشر
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) أهمية دليل العمل
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) عرض دليل العمل وتعيينه
# 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 |
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"]
r-tutorial) ووضع جميع ملفات البرامج النصية .R بداخله.
7. التنفيذ عبر سطر الأوامر: Rscript
إذا كنت ترغب في تشغيل نصوص R (لأغراض الأتمتة أو المهام المجدولة أو الخلفية للويب) دون فتح RStudio، فاستخدم Rscript.
(1) إنشاء برنامج نصي
أنشئ ملفًا جديدًا باسم hello.R في أي مكان:
# hello.R
cat("Hello, World!\n")
(2) التشغيل من سطر الأوامر
افتح المحطة الطرفية (cmd / PowerShell في نظام Windows، و«Terminal» في نظامي macOS وLinux)، وقم بتشغيل الأمر التالي:
Rscript hello.R
النتيجة المتوقعة:
Hello, World!
Rscript على نطاق واسع في سيناريوهات مثل CI/CD، وخطوط نقل البيانات، وواجهات برمجة التطبيقات على الويب (R Plumber)، وهو أمر يجب على كل مهندس R إتقانه.
8. مثال كامل: تدريب شامل على قواعد النحو الأساسية
فيما يلي مثال على مسار عمل كامل يربط بين جميع المفاهيم التي تم تناولها في هذا الدرس.
▶ مثال: برنامج نصي لإدارة معلومات الطلاب
# ============================================
# 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)
النتيجة المتوقعة:
=== 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). إن نسيان مسافة واحدة يحدث فرقًا كبيرًا. اعتمد عادة إضافة مسافات قبل وبعد <-.📖 ملخص
- في لغة R، استخدم
#لكتابة تعليقات من سطر واحد (لا توجد صيغة/* */للتعليقات المجمعة)؛ واستخدم اختصار RStudioCtrl+Shift+Cلتعليق عدة أسطر دفعة واحدة - قواعد تسمية المتغيرات: الأحرف الأبجدية الرقمية، وشرطات التسطير السفلية، والنقاط؛ لا يجوز أن تبدأ المتغيرات برقم؛ يُراعي التمييز بين الأحرف الكبيرة والصغيرة؛ يُنصح باستخدام النمط
snake_case - عامل التعيين المفضل هو
<-(وفقًا للأعراف المتبعة في مجتمع R)؛ ويُستخدم=عند تمرير المعلمات إلى الدوال؛ ويجب أن يكون<-محاطًا بمسافات (لتجنب الخلط مع< -) - وظائف الإخراج:
print()عام (مع مؤشر[1])،cat()التسلسل (موصى به، مرن)،message()رسالة عادية،warning()تحذير،stop()خطأ - لعرض إعدادات دليل العمل، استخدم
getwd()/setwd()؛ نوصي بشدة باستخدام مشروع RStudio لتجنب مشاكل المسار. - استخدم
Rscript hello.Rلتشغيل نصوص R من سطر الأوامر؛ وهو مناسب لسيناريوهات الأتمتة، وCI/CD، وواجهات برمجة التطبيقات على الويب
📝 تمارين
-
تمرين أساسي: أنشئ نصوصًا برمجية جديدة في RStudio وحدد خمسة متغيرات لتخزين نص (
name)، وعمرك (age)، ووزنك (weight، رقم عائم)، وما إذا كنت طالبًا (is_student، قيمة منطقية)، ومدينتك (city). استخدمcat()لربطها معًا في الناتج: «أنا [name]، عمري [age] سنة، وزني [weight] كجم، أعيش في [city]، و[is_student] ما زلت في المدرسة.» التقط لقطة شاشة بعد تشغيل البرنامج النصي واحفظها. -
تمرين أساسي: أنشئ مشروعًا جديدًا في RStudio باسم
r-basics. داخل المشروع، أنشئ برنامجًا نصيًّا باسمvariables.Rوحدد خمسة متغيرات من أنواع مختلفة (رقمي، حرفي، منطقي، معقد، وفارغNA). استخدمtypeof()للتحقق من نوع كل متغير، وقم بالتقاط لقطة شاشة لنتائج كل من الأوامر الخمسةtypeof()واحفظها. -
مشكلة متقدمة: اكتب برنامجًا نصيًّا يقوم بما يلي: ① يستخدم
paste()لربط"Hello"و"World"معًا لتكوين "Hello-World" (sep = "-")؛ ② يستخدمcat()لطباعة النتيجة؛ ③ يستخدمnchar()للتحقق من طول السلسلة المجمعة. بعد تشغيل البرنامج النصي، التقط لقطة شاشة واحفظ مخرجات وحدة التحكم. -
التحدي: اكتب برنامجًا نصيًّا بلغة R يقوم بما يلي: ① استخدم
setwd()لتغيير دليل العمل إلىtempdir()(الدليل المؤقت لـ R)؛ ② استخدمgetwd()لعرض دليل العمل الحالي؛ ③ استخدمsave.image()لحفظ مساحة العمل فيmy_workspace.RData؛ ④ استخدمrm(list = ls())لمسح جميع المتغيرات؛ ⑤ استخدمload("my_workspace.RData")لإعادة التحميل. تحقق من أن جميع المتغيرات لا تزال موجودة بعد إعادة التحميل. بعد تشغيل البرنامج النصي، التقط لقطة شاشة واحفظ الناتج الكامل لجميع الخطوات الخمس.