R Academy · درس

عوامل الإسناد والعوامل الخاصة

استكشف ‎ >‎ و‎%in%‎ وعامل الأنابيب في R.

الدرس 3 من 413 خطوة

عوامل الإسناد والعوامل الخاصة درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

الإسناد في R

يوفّر R عدة طرق لإسناد القيم إلى المتغيرات. وأكثرها اصطلاحية هو <-، وهو الأسلوب المفضّل. وستصادف أيضًا = للإسناد، مع أنه يتصرف بشكل مختلف قليلًا في بعض السياقات.

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

السهم الأيسر <- مقابل يساوي =

ينشئ <- دائمًا متغيرًا في البيئة الحالية. ويمكن لـ = إجراء الإسناد أيضًا، لكنه يعيّن داخل استدعاءات الدوال وسائط مُسمّاة بدلًا من إنشاء متغير. هذا الفرق مهم.

# <- creates a variable outside function calls
x <- 42

# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3))  # x is an arg here, not a variable

# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3))  # y is now also in workspace
cat('y was created:', y, '
')

عامل الإسناد إلى اليمين ->

يدعم R أيضًا الإسناد من اليمين إلى اليسار باستخدام ->. إذ يعيّن قيمة الطرف الأيسر إلى الاسم الموجود على اليمين. ورغم صلاحيته، نادرًا ما يُستخدم عمليًا لأنه يقلل من سهولة القراءة.

# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')

# Same as:
# max_score <- 100
# course_name <- 'R Programming'

الإسناد العام باستخدام <<-

يعيّن <<- قيمةً إلى متغير في البيئة الأصل (المحيطة)، وليس في بيئة الدالة المحلية. ويُستخدم داخل الدوال لتعديل متغير موجود خارج الدالة.

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

عامل الانتماء %in%

يتحقق %in% مما إذا كان كل عنصر في الطرف الأيسر موجودًا في المتجه الموجود على اليمين. ويعيد متجهًا منطقيًا بالطول نفسه للطرف الأيسر. وهذه أوضح طريقة لاختبار الانتماء إلى مجموعة في R.

fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')

# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')

# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')

التصفية باستخدام %in%

يكون %in% مفيدًا خصوصًا عند استخدامه لتصفية المتجهات أو صفوف إطار البيانات. فهو يتيح لك اختيار العناصر التي تنتمي إلى مجموعة محددة مسبقًا من القيم المسموح بها.

countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126)  # millions

# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')

ضرب المصفوفات باستخدام %*%

ينفّذ %*% ضرب المصفوفات الحقيقي (الجداء النقطي)، بخلاف * الذي يضرب العناصر واحدًا بواحد. بالنسبة إلى مصفوفتين A ‏(m x n) وB ‏(n x p)، تكون النتيجة مصفوفة بحجم ‏(m x p).

A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)

cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)

أنبوب R الأصلي |>

أُضيف الأنبوب الأصلي |> في R 4.1، وهو يمرر ناتج التعبير الموجود على اليسار بوصفه الوسيط الأول للدالة الموجودة على اليمين. ويجعل سلاسل العمليات أسهل بكثير في القراءة.

# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')

# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')

# Reading left to right: take -16, get abs, sqrt, then round

استخدام الأنبوب مع المتجهات

يكون الأنبوب الأصلي |> مفيدًا خصوصًا مع المتجهات والعمليات الرقمية. ويمكنك ربط التحويلات دون إنشاء متغيرات وسيطة، مما يجعل التعليمات البرمجية أوضح وأسهل في التتبع.

scores <- c(88, 45, 92, 61, 73, 55, 84, 79)

# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')

# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')

العوامل المخصصة بينية الصياغة

يتيح لك R تعريف عوامل مخصصة بينية الصياغة باستخدام الصيغة %name%. بهذه الطريقة تعرّف حزم مثل dplyr أنبوب %>%. ويمكنك إنشاء عامل خاص بك للعمليات المتعلقة بمجال معين.

# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)

cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')

cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')

مرجع سريع للعوامل

فيما يلي ملخص للعوامل الخاصة التي تناولها هذا الدرس:

  • <- — الإسناد القياسي (المفضّل)
  • = — الإسناد (ويُستخدم أيضًا لوسائط الدوال)
  • <<- — الإسناد إلى البيئة العامة/الأصل
  • %in% — اختبار الانتماء
  • %*% — ضرب المصفوفات
  • |> — الأنبوب الأصلي (R 4.1+)
  • %name% — صيغة العامل المخصص بيني الصياغة
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')

# Demonstrate pipe
1:10 |> mean() |> cat('
')

تحقق سريع

ماذا يعيد العامل %in% عند استخدامه كما يلي: c(2, 4, 6) %in% c(1, 2, 3)؟

مراجعة: العوامل الخاصة

أحسنت! إليك أهم النقاط المستخلصة من هذا الدرس:

  • استخدم <- للإسناد — فهو اصطلاح R
  • يعمل = للإسناد، لكنه ملتبس داخل استدعاءات الدوال
  • يعدّل <<- متغيرًا في البيئة الأصل (العامة) من داخل دالة
  • يُعد %in% أوضح طريقة لاختبار الانتماء إلى مجموعة في R
  • ينفّذ %*% ضرب المصفوفات (وليس ضرب العناصر واحدًا بواحد)
  • يربط الأنبوب الأصلي |> (R 4.1+) استدعاءات الدوال من اليسار إلى اليمين لكتابة تعليمات واضحة
  • تتبع العوامل المخصصة النمط %name%
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15

result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')
البدء مجانًا

تعلم R مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
43
الدروس
159

الأسئلة الشائعة

هل درس «عوامل الإسناد والعوامل الخاصة» مجاني؟

نعم — نص درس «عوامل الإسناد والعوامل الخاصة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «عوامل الإسناد والعوامل الخاصة»؟

استكشف ‎ >‎ و‎%in%‎ وعامل الأنابيب في R. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «عوامل الإسناد والعوامل الخاصة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. عوامل الحساب والمقارنة
  2. العوامل المنطقية والمنطق البولياني
  3. عوامل الإسناد والعوامل الخاصة
  4. أولوية العوامل والتعبيرات المعقدة
← العودة إلى R Academy