تقطيع وفهرسة المتجهات
جزء من قسم Fundamentals في رحلة R على Coddy — الدرس 67 من 78.
لقد تعلمت كيفية الوصول إلى العناصر الفردية والتكرار عبر المتجهات (vectors). الآن دعنا نستكشف كيفية استخراج عناصر متعددة في وقت واحد باستخدام تقنية التقطيع (slicing). تتيح لك هذه التقنية الحصول على مجموعة فرعية من المتجه في عملية واحدة.
لاستخراج عناصر متعددة، مرر متجهاً من الفهارس داخل الأقواس المربعة:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])المخرجات:
[1] 10 30 50يمكنك أيضاً استخدام عامل النقطتين الرأسيتين لتحديد نطاق من العناصر المتتالية:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])المخرجات:
[1] 20 30 40تعد الفهارس السالبة قوية في لغة R. فهي تستبعد العناصر بدلاً من تحديدها:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])المخرجات:
[1] 10 30 40 50يمكنك استبعاد عناصر متعددة عن طريق تمرير متجه من الفهارس السالبة:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])المخرجات:
[1] 20 30 40تذكر: لا يمكنك خلط الفهارس الموجبة والسالبة في نفس التحديد. سيقوم R بإظهار خطأ إذا حاولت numbers[c(1, -2)].
التحدي
سهلستتلقى سطرين من المدخلات:
- قائمة من الأرقام المفصولة بفاصلة (على سبيل المثال،
100,200,300,400,500,600,700) - فهرسان مفصولان بفاصلة يمثلان نطاقاً للاستبعاد (على سبيل المثال،
2,5)
قم بإجراء العمليات التالية:
- إنشاء متجه عددي من الأرقام المفصولة بفاصلة
- طباعة العناصر في المواقع 1 و 3 و 5 باستخدام متجه من الفهارس
- طباعة العناصر من الموقع 2 إلى الموقع 4 باستخدام عامل النقطتين الرأسيتين (colon operator)
- طباعة المتجه مع استبعاد العنصر الموجود في الفهرس الأول المعطى (باستخدام الفهرسة السالبة)
- طباعة المتجه مع استبعاد العناصر من الفهرس الأول إلى الفهرس الثاني (باستخدام الفهرسة السالبة مع نطاق)
على سبيل المثال، إذا كانت المدخلات هي:
10,20,30,40,50,60,70
3,5يجب أن تكون المخرجات:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70الشرح:
- العناصر في المواقع 1، 3، 5 هي: 10، 30، 50
- العناصر من الموقع 2 إلى 4 هي: 20، 30، 40
- استبعاد الموقع 3 يعطي: 10، 20، 40، 50، 60، 70
- استبعاد المواقع من 3 إلى 5 يعطي: 10، 20، 60، 70
جرّب بنفسك
# قراءة المدخلات
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# تحليل الأرقام المفصولة بفاصلة إلى متجه عددي (numeric vector)
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# تحليل المؤشرين (indices)
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: اكتب كودك أدناه
# 1. اطبع العناصر في المواقع 1 و 3 و 5 باستخدام متجه من المؤشرات
# 2. اطبع العناصر من الموقع 2 إلى الموقع 4 باستخدام عامل النقطتين الرأسيتين (colon operator)
# 3. اطبع المتجه مع استبعاد العنصر الموجود في idx1 (الفهرسة السالبة)
# 4. اطبع المتجه مع استبعاد العناصر من idx1 إلى idx2 (الفهرسة السالبة مع نطاق)يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات - الجزء الثاني
المعاملات المنطقية (AND, OR)المعاملات المنطقية - الجزء الثاني (NOT)مراجعة - المنطق البسيطالمنطق المتجهي - الجزء الأولالمنطق المتجهي - الجزء الثاني7حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على مدخلات المستخدم13المتجهات المتقدمة
تقطيع وفهرسة المتجهاتالفهرسة المنطقيةالعمليات الحسابية وإعادة تدوير المتجهاتالمعامل %in%2المتغيرات وأنواع البيانات
نوع البيانات الرقمينوع البيانات الصحيحنوع البيانات الحرفينوع البيانات المنطقيالتحقق من أنواع البياناتقواعد التسميةالقيم المفقودة: NAملخص - إنشاء المتغيرات8الحلقات التكرارية
حلقة Forحلقة Whileجملة Breakجملة Next (Continue)مراجعة - المضروب (Factorial)توليد المتتاليات (seq, :)الحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)3المعاملات - الجزء الأول
المعاملات الحسابيةقسمة الأعداد الصحيحة وباقي القسمةمعاملات الإسنادملخص - عمليات رياضية بسيطةمعاملات المقارنة6أساسيات الإدخال والإخراج
طباعة المخرجاتاستخدام Cat للمخرجاتالمخرجات مع المتغيراتقراءة المدخلات باستخدام readline()أساسيات تحويل أنواع البياناتمراجعة - حاسبة العمرمراجعة - صح أم خطأ