المتجهات والمتتاليات المسمّاة
عيّن أسماء المتجهات وتمكّن من الوصول إليها لكتابة شيفرة واضحة.
المتجهات والمتتاليات المسمّاة درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
مقدمة إلى المتجهات المسماة
المتجه المسمى هو متجه يرتبط بكل عنصر فيه اسم (تسمية محرفية). تجعل الأسماء الشيفرة أكثر وضوحًا، وتتيح الوصول إلى العناصر بالاسم بدلًا من فهرس الموضع.
# A plain vector vs a named vector
plain <- c(78, 92, 85, 67)
named <- c(Alice = 78, Bob = 92, Carol = 85, Dave = 67)
cat('Plain vector:', plain, '
')
cat('Named vector:
')
print(named)إنشاء متجهات مسماة باستخدام c()
أبسط طريقة لإنشاء متجه مسمى هي استخدام أزواج name = value داخل c(). ويمكن أن تكون الأسماء أي سلاسل نصية صالحة؛ وإذا احتوت على مسافات أو محارف خاصة، فضعوها بين backticks أو علامتي اقتباس.
# GDP in trillions USD
gdp <- c(USA = 27.4, China = 18.0, Germany = 4.1,
Japan = 4.2, UK = 3.1)
cat('GDP values:
')
print(gdp)
cat('Names:', names(gdp), '
')
cat('Values:', unname(gdp), '
')الدالة names()
تسترجع names(x) أسماء المتجه في صورة متجه محرفي. ويمكنكم أيضًا تعيين الأسماء بعد الإنشاء باستخدام names(x) <- c(...)، ما يعدّل المتجه مباشرة.
# Assign names after creation
temps <- c(22.1, 18.5, 25.3, 20.0)
cat('Before naming:', temps, '
')
names(temps) <- c('Mon', 'Tue', 'Wed', 'Thu')
cat('After naming:
')
print(temps)
# Retrieve names
cat('Days:', names(temps), '
')الوصول إلى العناصر بالاسم
يمكنكم الوصول إلى عناصر المتجه المسمى باستخدام x["name"] أو x[["name"]]. يعيد القوس المفرد [] مجموعة فرعية مسماة، بينما يعيد [[]] القيمة فقط من دون الاسم.
scores <- c(Math = 88, Science = 92, English = 75, History = 81)
# Single bracket: keeps name
cat('Math score (with name):
')
print(scores['Math'])
# Double bracket: just the value
cat('Science score (value only):', scores[['Science']], '
')
# Multiple names
cat('STEM subjects:
')
print(scores[c('Math', 'Science')])استخدام setNames() بأسلوب الدوال
تعيد setNames(x, nm) نسخة من x مع تعيين الأسماء إلى nm، من دون تعديل الأصل. ويفيد ذلك في سلاسل العمليات التي تريدون فيها تسمية متجه كجزء من سلسلة العمليات.
# setNames returns a named copy (does not modify original)
raw_values <- c(0.85, 0.72, 0.91, 0.68)
metrics <- setNames(raw_values, c('Precision', 'Recall', 'F1', 'Accuracy'))
cat('Original (unchanged):', raw_values, '
')
cat('Named metrics:
')
print(metrics)
# Best metric
best_name <- names(which.max(metrics))
cat('Best metric:', best_name, '=', metrics[best_name], '
')تعديل الأسماء
يمكنكم تغيير أسماء فردية عبر الفهرسة داخل names(x). ويفيد ذلك عندما تحتاجون إلى إعادة تسمية مجموعة فرعية من العناصر دون إعادة إنشاء المتجه بأكمله.
prices <- c(apple = 1.20, bannana = 0.80, cherry = 3.50) # typo!
# Fix a single name
names(prices)[2] <- 'banana'
cat('Fixed names:
')
print(prices)
# Rename all
names(prices) <- c('Apple', 'Banana', 'Cherry') # capitalise
cat('Capitalised:
')
print(prices)تسلسلات مسماة باستخدام seq() وnames()
يمكنكم إنشاء تسلسل مسمى بدمج seq() مع setNames(). ويفيد ذلك خصوصًا في الفهارس الشهرية أو الأسبوعية، حيث تضيف الأسماء سياقًا إلى القيم الرقمية.
# Monthly average temperature with names
temps_monthly <- setNames(
c(3.1, 4.2, 8.5, 13.0, 17.2, 21.0, 23.5, 23.0, 19.0, 13.5, 7.8, 4.0),
month.abb
)
cat('Monthly temps:
')
print(temps_monthly)
cat('Summer avg:', mean(temps_monthly[c('Jun', 'Jul', 'Aug')]), '
')تصفية المتجهات المسماة
تدعم المتجهات المسماة الفهرسة المنطقية والمحرفية معًا. ويمكنكم تحديد العناصر بالاسم وتصفيتها حسب القيمة في الوقت نفسه، ما يجعل المتجهات المسماة معبّرة جدًا في جداول البحث الصغيرة.
population <- c(Tokyo = 37.4, Delhi = 32.9, Shanghai = 28.5,
Dhaka = 22.5, Cairo = 21.3, Mumbai = 20.7)
# Select cities with population > 25 million
big_cities <- population[population > 25]
cat('Cities over 25M:
')
print(big_cities)
# Sort descending by population
cat('Ranked:
')
print(sort(population, decreasing = TRUE))إزالة الأسماء باستخدام unname()
تزيل unname(x) جميع الأسماء من المتجه، وتعيد القيم فقط. ويفيد ذلك عند تمرير البيانات إلى دوال لا تتوقع متجهات مسماة، أو عندما تضيف الأسماء ازدحامًا بصريًا إلى الناتج.
named_vec <- c(x1 = 10, x2 = 20, x3 = 30, x4 = 40)
cat('Named:
')
print(named_vec)
unnamed_vec <- unname(named_vec)
cat('Unnamed:
')
print(unnamed_vec)
# Check
cat('Has names after unname:', !is.null(names(unnamed_vec)), '
')المتجهات المسماة كجداول بحث
من أقوى استخدامات المتجهات المسماة استخدامها كجدول بحث: ربط المفاتيح بالقيم. فبدلًا من سلسلة من عبارات if-else، استخدموا متجهًا مسمى وافهرسوا فيه.
# Map month abbreviation to number of days
days_in_month <- c(Jan=31, Feb=28, Mar=31, Apr=30, May=31,
Jun=30, Jul=31, Aug=31, Sep=30, Oct=31,
Nov=30, Dec=31)
# Look up specific months
query <- c('Mar', 'Jul', 'Nov')
cat('Days in', query[1], ':', days_in_month[query[1]], '
')
cat('Days in', query[2], ':', days_in_month[query[2]], '
')
cat('Days in', query[3], ':', days_in_month[query[3]], '
')المتجهات المسماة: حقائق أساسية
ملخص ميزات المتجهات المسماة في R:
- إنشاؤها باستخدام
c(name = value, ...)أو تعيينها عبرnames(x) <- c(...) - الوصول بالاسم باستخدام
x['name'](يبقي الاسم) أوx[['name']](القيمة فقط) - تعيد
setNames(x, nm)نسخة مسماة من دون تعديل الأصل - تزيل
unname(x)جميع الأسماء - تعمل المتجهات المسماة كجداول بحث أنيقة (بديلًا عن سلاسل if-else)
# Complete workflow
rates <- c(USD = 1.0, EUR = 0.92, GBP = 0.79, JPY = 149.5)
# Convert 100 USD to each currency
amount_usd <- 100
converted <- amount_usd * rates
cat('100 USD in other currencies:
')
print(round(converted, 2))اختبار سريع
ما الفرق بين x['key'] وx[['key']] عندما يكون x متجهًا مسمى؟
مراجعة: المتجهات المسماة
أحسنتم! إليكم أهم ما تعلمتموه في هذا الدرس:
- تربط المتجهات المسماة كل عنصر بتسمية محرفية
- يمكن إنشاؤها باستخدام الصيغة
c(name = val)أو تعيينها باستخدامnames(x) <- ... - تعيد
x['name']مجموعة فرعية مسماة، بينما يعيدx[['name']]القيمة فقط - تُعد
setNames()الطريقة الوظيفية (غير المعدِّلة) لإضافة الأسماء - استخدموا المتجهات المسماة كجداول بحث بدلًا من سلاسل if-else المطولة
- تزيل
unname()الأسماء عند الحاجة إلى القيم الخام
# Named vector as grade lookup
grade_map <- c('90'='A', '80'='B', '70'='C', '60'='D')
student_score <- 80
# Find grade bracket
brackets <- c(90, 80, 70, 60)
threshold <- max(brackets[brackets <= student_score])
cat('Score:', student_score, '-> Grade:', grade_map[as.character(threshold)], '
')تعلم R مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 43
- الدروس
- 159
الأسئلة الشائعة
هل درس «المتجهات والمتتاليات المسمّاة» مجاني؟
نعم — نص درس «المتجهات والمتتاليات المسمّاة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «المتجهات والمتتاليات المسمّاة»؟
عيّن أسماء المتجهات وتمكّن من الوصول إليها لكتابة شيفرة واضحة. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «المتجهات والمتتاليات المسمّاة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عامل النقطتين لنطاقات الأعداد الصحيحة
- seq() للمتتاليات المخصّصة
- rep() لتكرار القيم
- المتجهات والمتتاليات المسمّاة