R: المُشغِّلات في لغة R

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

في الدرس السابق، تعرفنا على المتجهات وأنواع البيانات. في هذا الدرس، سنتعمق في «أساسيات» البرمجة بلغة R، ألا وهي المُشغِّلات. فجميع برامج R — بدءًا من الحسابات البسيطة وصولاً إلى النماذج الإحصائية المعقدة — تعتمد في جوهرها على المُشغِّلات.

مجموعة العوامل الحسابية في لغة R تشبه إلى حد كبير تلك الموجودة في اللغات الأخرى، ولكن هناك تفصيلين صغيرين يقتصران على لغة R: القسمة الصحيحة %% %/% وسلوك «البث» المتجهي. في هذا الدرس، سنستعرض جميع العوامل الحسابية بشكل شامل.

1. ما ستتعلمه



2. قصة عن عملية حسابية مالية

(1) المشكلة: حساب الأرباح يدويًّا

بوب محاسب، وفي نهاية الشهر، يتعين عليه إعداد «تقرير مبيعات الفرع» لمديره:

لدى الشركة 5 فروع، وتبلغ مبيعات كل فرع هذا الشهر 120, 150, 80, 200, 175 عشرة آلاف يوان. احسب:

  • إجمالي المبيعات، متوسط المبيعات
  • ربح كل متجر (المبيعات × هامش ربح 30٪)
  • ما هي المتاجر التي تسجل مبيعات أعلى من المتوسط (تتطلب اهتمامًا خاصًا)
  • الجزء الصحيح من إجمالي الربح (بالآلاف من اليوان، مقربًا إلى الأقل)

إذا أجريت الحساب يدويًّا باستخدام آلة حاسبة، فسيستغرق الأمر 5 دقائق؛ أما باستخدام برنامج «إكسل»، فعليك إنشاء جدول بيانات وإدخال الصيغ؛ أما باستخدام لغة البرمجة «R»—

(2) الحل باستخدام لغة R

R
# 5 Sales at each branch(10,000 yuan)
sales <- c(120, 150, 80, 200, 175)

# All calculations are completed with a single line of code
total_sales <- sum(sales)                          # Total Sales 725
avg_sales <- mean(sales)                           # Average 145
profit <- sales * 0.3                              # Profit Vector
high_sales <- sales[sales > avg_sales]             # Branches with Above-Average Performance
profit_int <- profit %/% 1                         # Integer Profit(Integer Division)

cat("Total Sales:", total_sales, "10,000 yuan\n")
cat("Average Sales:", avg_sales, "10,000 yuan\n")
cat("Total Profit(Integer):", sum(profit_int), "10,000 yuan\n")
cat("Above-average sales at branch locations:", high_sales, "\n")

10 أسطر من التعليمات البرمجية لحل 5 مهام حسابية. هذه هي قوة عامل R — سطر واحد من التعليمات البرمجية يعادل متجهًا من العمليات.



3. العوامل الحسابية: العمليات الحسابية

(1) العوامل الحسابية الأساسية

المشغل المعنى مثال النتيجة
+ إضافة 2 + 3 5
- انخفاض 5 - 2 3
* الضرب 4 * 3 12
/ حذف 7 / 2 3.5
^ أو ** الطاقة 2 ^ 3 8
%% الطرح (الباقي) 7 %% 2 1
%/% القسمة الصحيحة 7 %/% 2 3

(2) القسمة الصحيحة: خاص بـ R

R
# 7 / 2 = 3.5(Ordinary Division)
7 / 2
# [1] 3.5

# 7 %/% 2 = 3(Integer Division,Round down)
7 %/% 2
# [1] 3

# 7 %% 2 = 1 (Modulo, Remainder)
7 %% 2
# [1] 1

# Practical Application: Convert seconds to "hr:min:s"
total_seconds <- 3725
hours <- total_seconds %/% 3600
minutes <- (total_seconds %% 3600) %/% 60
seconds <- total_seconds %% 60
cat(hours, "hr", minutes, "min", seconds, "s\n")
# 1 hr 2 min 5 s
💡 نصيحة: عمليات القسمة الصحيحة %% و%/% شائعة جدًّا في معالجة البيانات: ترقيم الصفحات (page %/% page_size)، والتجميع (id %% 10 — التقسيم إلى 10 مجموعات بناءً على الرقم الأخير)، وتحويل الوحدات الزمنية.

(3) العمليات على المتجهات (نقطة أساسية)

يتم تنفيذ العمليات الحسابية في R بشكل متجه افتراضيًا — وهذه إحدى نقاط القوة الأساسية في R:

100%
graph LR
    A["x = 1, 2, 3"] --> C["+ 10"]
    C --> D["11, 12, 13"]
    
    E["x = 1, 2, 3"] --> F["+ y = 10, 20, 30"]
    F --> G["11, 22, 33"]
    
    style A fill:#cce5ff
    style C fill:#d4edda
    style D fill:#d4edda
R
# Vector + Scalar(Scalar"Broadcast"Go to each element)
c(1, 2, 3) + 10
# [1] 11 12 13

# Vector + Vector(Element-wise Operations)
c(1, 2, 3) + c(10, 20, 30)
# [1] 11 22 33

# When the lengths are different,"Loop"
c(1, 2, 3, 4) + c(10, 20)
# Warning: longer object length is not a multiple of shorter object length
# [1] 11 22 13 24

(4) الدوال الرياضية الشائعة

الوظيفة الغرض مثال
abs() القيمة المطلقة abs(-5)5
sqrt() الجذر التربيعي sqrt(16)4
اللوغاريتم الطبيعي
log10() اللوغاريتم العادي log10(1000)3
log2() القاعدة 2 log2(8)3
exp() x أس e exp(1)2.718
التجميع round()
floor() التقريب إلى الأقل floor(3.7)3
ملخص ceiling() ceiling(3.2)4


4. عوامل المقارنة: تقييم «صحيح/خطأ»

(1) 6 عوامل المقارنة

المشغل المعنى مثال النتيجة
== يساوي 5 == 5 TRUE
!= لا يساوي 5 != 3 TRUE
< أصغر من 3 < 5 TRUE
> أكبر من 5 > 3 TRUE
<= أقل من أو يساوي 5 <= 5 TRUE
>= أكبر من أو يساوي 5 >= 6 FALSE

(2) ⚠️ خطأ شائع مهم: علامة التساوي المفردة مقابل علامتي التساوي المزدوجتين

R
# Single = It is an assignment
x = 5

# Double equal sign == It is a comparison
x == 5
# [1] TRUE
⚠️ ملاحظة: عند إجراء المقارنات، يجب عليك استخدام ==؛ لا تستخدم =. لن يُظهر R خطأً من نوع "=`" (لأنها عملية تعيين صحيحة)، لكن النتيجة ستكون خاطئة تمامًا.

(3) مقارنة السلاسل (الترتيب المعجمي)

R
# Character by ASCII Code Comparison
"apple" < "banana"
# [1] TRUE  ← 'a' Coding < 'b'

# Numeric characters cannot be compared directly for size.(Character-by-character comparison,Not by value)
"9" > "10"
# [1] TRUE  <- '9' (0x39) > '1' (0x31), Not a numerical comparison!

# The Correct Way to Do It:Convert to a number
as.numeric("9") > as.numeric("10")
# [1] FALSE

(4) مقارنة القيم الخاصة

R
# NA The results of the comparison are NA(No TRUE/FALSE)
NA == 5
# [1] NA

# Decision NA Must use is.na()
is.na(NA)
# [1] TRUE

# NaN Comparison of
NaN == NaN
# [1] NA  <- NaN == NaN is also NA!
⚠️ ملاحظة: أي نتيجة مقارنة تحتوي على NA تُعتبر NA. استخدم is.na() تحديدًا للتحقق من ذلك.



5. العوامل المنطقية: الجمع بين الشروط

(1) العوامل المنطقية الأساسية الثلاثة

المشغل المعنى مثال النتيجة
& عملية «AND» لكل عنصر على حدة TRUE & FALSE FALSE
| عملية «أو» لكل عنصر على حدة TRUE | FALSE TRUE
! إلغاء !TRUE FALSE

(2) التحويل إلى متجهات (نقطة أساسية)

R
x <- c(TRUE, TRUE, FALSE, FALSE)
y <- c(TRUE, FALSE, TRUE, FALSE)

# Elemental Level AND(Vectorization)
x & y
# [1]  TRUE FALSE FALSE FALSE

# Elemental Level OR
x | y
# [1] TRUE TRUE TRUE FALSE

(3) تقييم الدائرة القصيرة: && و ||

المشغل السلوك الغرض
& عملية «AND» على كل عنصر على حدة، جميع العمليات الحسابية العمليات المنطقية على المتجهات
&& عملية «AND» بالقصير الدائرة، يُحتسب الأول فقط شرط «if»
| عملية «أو» على مستوى العناصر، جميع العمليات الحسابية العمليات المنطقية على المتجهات
|| عملية «أو» القصيرة، يُحتسب الأول فقط شرط if
R
# if Used in the conditions &&(Check only the first element)
if (x > 0 && x < 10) {
  cat("x is between 0-10\n")
}

# Used in vector logic &(Check all elements)
c(1, 2, 11) > 0 & c(1, 2, 11) < 10
# [1]  TRUE  TRUE FALSE
⚠️ ملاحظة: في الحالة if، يجب عليك استخدام && و||؛ ولا تستخدم & أو |. وإلا، فقد تحصل على نتائج غير متوقعة.

(4) تدريب عملي: التصفية باستخدام شروط مجمعة

R
# Find 18-30 Adults aged
ages <- c(15, 22, 28, 35, 40, 19)
adults <- ages[ages >= 18 & ages <= 30]
adults
# [1] 22 28 19

# Identify the failing or perfect scores
scores <- c(58, 60, 75, 100, 45, 90)
special <- scores[scores < 60 | scores == 100]
special
# [1]  58 100  45


6. العوامل الخاصة بلغة R

(1) 5 من أفراد القوات الخاصة

المشغل المعنى مثال النتيجة
%in% ينتمي إلى (التحقق من العضوية) 3 %in% c(1,2,3) TRUE
%*% ضرب المصفوفات matrix(1:4,2) %*% matrix(1:4,2) المصفوفات
%/% القسمة الصحيحة 7 %/% 2 3
%% إخراج القالب 7 %% 2 1
: التسلسل 1:5 1 2 3 4 5

(2) شرح مفصل لـ %in%

%in% هو المشغل «الأساسي» لتصفية البيانات:

R
# Is the element in the vector?
c(1, 2, 3) %in% c(2, 4, 6)
# [1] FALSE  TRUE FALSE  <- 1, 3 Not here; 2 is

# Practical Application: Filter "Beijing, Shanghai, and Guangzhou" City
cities <- c("Beijing", "Shanghai", "Shenzhen", "Guangzhou", "Hangzhou")
target <- c("Beijing", "Shanghai", "Guangzhou")
cities[cities %in% target]
# [1] "Beijing" "Shanghai" "Guangzhou"

(3) مقدمة في ضرب المصفوفات %*%

R
# Basic Multiplication(Elemental Level)
matrix(1:4, 2, 2) * matrix(1:4, 2, 2)
#      [,1] [,2]
# [1,]    1    9
# [2,]    4   16

# Matrix Multiplication(Linear Algebra)
matrix(1:4, 2, 2) %*% matrix(1:4, 2, 2)
#      [,1] [,2]
# [1,]    7   15
# [2,]   10   22


7. أولوية العمليات الحسابية (تجنب الغموض)

تتبع العوامل الحسابية في لغة R ترتيبًا محددًا للأولوية؛ استخدام الأقواس عند الشك هو النهج الأكثر أمانًا:

الأولوية المشغل الوصف
عالي ^ عمليات الطاقة
* / الضرب والقسمة
+ - الجمع والطرح
< <= > >= == != مقارنة
! تراجع
& && مع
أو
منخفض <- واجب
R
# Without parentheses(By priority)
1 + 2 * 3
# [1] 7  <- 2*3=6, then +1

# Add parentheses(Clarify Intent)
(1 + 2) * 3
# [1] 9

# Be sure to use parentheses in complex expressions.
# Find 18-65 yrs
ages <- c(15, 25, 70, 30)
adults <- ages[ages >= 18 & ages <= 65]   # ✅ Adding parentheses makes it clearer
💡 نصيحة: إذا كنت غير متأكد، أضف أقواسًا. الغرض من الكود هو أن يقرأه الناس — فالسهولة في القراءة أهم من الإيجاز.



8. مثال كامل: تحليل شامل لمبيعات الفروع

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

▶ مثال: تحليل شامل لمبيعات الفروع

R
# ============================================
# Comprehensive Analysis of Branch Sales
# Features:Analysis Using Various Operators 5 Sales Data by Branch
# ============================================

# 1. Prepare data
sales <- c(Beijing = 120, Shanghai = 150, Shenzhen = 80, Guangzhou = 200, Hangzhou = 175)
cat("Raw Sales Data(10,000 yuan):\n")
print(sales)

# 2. Arithmetic Operations:Total Sales,Average,Highest,Lowest
total <- sum(sales)                  # Sum
avg <- mean(sales)                   # Average
cat("\nTotal Sales:", total, "10,000 yuan\n")
cat("Average Sales:", avg, "10,000 yuan\n")
cat("Top Sales:", max(sales), "10,000 yuan\n")
cat("Minimum Sales:", min(sales), "10,000 yuan\n")

# 3. Arithmetic Operations:Profit(30% Profit Margin)
profit_rate <- 0.3
profit <- sales * profit_rate        # Vector × Scalar
cat("\nTotal Profit:", sum(profit), "10,000 yuan\n")

# 4. Comparison + Logic:Identify branches that perform above average
is_above_avg <- sales > avg           # Comparison:Which ones are above average?
cat("\nBranches with Above-Average Performance:")
print(sales[is_above_avg])

# 5. Comparison + Logic:Identify low-performing stores(< 1,000,000)
is_low <- sales < 100
cat("\nLow-Sales Stores(< 1,000,000):")
print(sales[is_low])

# 6. Integer Operations:Round Profit to the Nearest Whole Number + Grouping
profit_int <- profit %/% 1            # Integer Division(Round down)
cat("\nRound Profit to the Nearest Whole Number:")
print(profit_int)

# 7. %in% Filter
target_cities <- c("Beijing", "Shanghai", "Guangzhou")
selected <- sales[names(sales) %in% target_cities]
cat("\nSales in Target Cities:")
print(selected)
▶ جرّب الكود

النتائج المتوقعة (مقتطف):

TEXT 📖 للعرض فقط
Raw Sales Data(10,000 yuan):
   Beijing    Shanghai    Shenzhen    Guangzhou    Hangzhou
   120     150      80     200     175

Total Sales: 725 10,000 yuan
Average Sales: 145 10,000 yuan
Top Sales: 200 10,000 yuan
Minimum Sales: 80 10,000 yuan

Branches with Above-Average Performance:
Guangzhou   Hangzhou
200    175

Total Profit: 217.5 10,000 yuan

Low-Sales Stores(< 1,000,000):
Shenzhen
  80


❓ أسئلة شائعة

س ما الفرق بين %% و%/%؟
ج تقوم %% بإجراء القسمة على أساس المودولو (تُرجع الباقي)، بينما تقوم %/% بإجراء القسمة الصحيحة (تُرجع الناتج). على سبيل المثال، 7 %/% 2 = 3 (الحاصل) و7 %% 2 = 1 (الباقي). وهذه العمليات شائعة جدًا في سيناريوهات ترقيم الصفحات وتحويل الوحدات الزمنية والتجميع.
س أيهما يجب أن أستخدم، & أم &&؟
ج استخدم & للعمليات المنطقية المتجهة (متجهة، تُقيّم جميع العناصر)؛ واستخدم && لشروط if (تقييم قصير الدائرة، يُقيّم العنصر الأول فقط). لا تميز لغة R بينهما بشكل صارم مثل اللغات الأخرى، لكن استخدام الخيار الخاطئ قد يؤدي إلى عبارات if غير صحيحة.

📖 ملخص


📝 تمارين

  1. المسألة الأساسية: استخدم لغة R لحساب 1+2+3+...+100 باستخدام ثلاث طرق مختلفة: ① sum(1:100) ② حلقة ③ صيغة n(n+1)/2. تحقق من تطابق النتائج التي تم الحصول عليها من الطرق الثلاث جميعها.

  2. تمرين أساسي: حوّل عدد الثواني total_seconds <- 3725 إلى التنسيق «ساعات:دقائق:ثوانٍ» (راجع مثال القسمة الصحيحة في هذا الدرس)، واحفظ لقطة شاشة للكود والنتيجة.

  3. المسألة الأساسية: استخدم %in% لإيجاد الأعداد الزوجية في المتجه c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) (باستخدام الطريقة الموضحة في c(2, 4, 6, 8, 10) %in%)، ثم التقط لقطة شاشة للنتيجة.

  4. مشكلة متقدمة: احسب درجات 5 طلاب scores <- c(85, 92, 78, 95, 88) باستخدام علامات المقارنة والمنطق من أجل: ① تحديد الدرجات التي تبلغ 90 أو أكثر؛ ② تحديد الدرجات التي تتراوح بين 60 و89؛ ③ حساب عدد الطلاب الذين حصلوا على درجات تبلغ 80 أو أكثر.

  5. التحدي: اكتب برنامجًا يستخدم sample(1:100, 20) لتوليد 20 عددًا عشوائيًا، واحسب: ① عدد الأعداد الزوجية (%% 2 == 0)؛ ② عدد الأعداد القابلة للقسمة على 3 (%% 3 == 0)؛ ③ عدد الأرقام الزوجية والقابلة للقسمة على 3 في آن واحد (& — الشرط المركب)؛ ④ مجموع هذه الأرقام ومتوسطها.

Web-Tutorial.com

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

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

100%