تقطيع وفهرسة المتجهات
جزء من قسم 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) - فهرسان (indices) مفصولان بفاصلة يمثلان نطاقاً للاستبعاد (على سبيل المثال،
2,5)
قم بإجراء العمليات التالية:
- أنشئ متجهاً رقمياً (numeric vector) من الأرقام المفصولة بفاصلة
- اطبع العناصر في المواقع 1 و 3 و 5 باستخدام متجه من الفهارس
- اطبع العناصر من الموقع 2 إلى الموقع 4 باستخدام عامل النقطتين (colon operator)
- اطبع المتجه مع استبعاد العنصر الموجود في الفهرس الأول المعطى (باستخدام الفهرسة السالبة negative indexing)
- اطبع المتجه مع استبعاد العناصر من الفهرس الأول إلى الفهرس الثاني (باستخدام الفهرسة السالبة مع نطاق)
على سبيل المثال، إذا كانت المدخلات هي:
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
ورقة مرجعية
لاستخراج عناصر متعددة من متجه (vector)، قم بتمرير متجه من الفهارس (indices) داخل أقواس مربعة:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50استخدم عامل النقطتين الرأسيتين (colon operator) لتحديد نطاق من العناصر المتتالية:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40تستبعد الفهارس السالبة العناصر بدلاً من تحديدها:
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هام: لا يمكنك الجمع بين الفهارس الموجبة والسالبة في نفس عملية التحديد.
جرّب بنفسك
# قراءة المدخلات
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# تحويل الأرقام المفصولة بفاصلة إلى متجه عددي
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# تحليل الفهرسين
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: اكتب الكود الخاص بك أدناه
# 1. طباعة العناصر في المواقع 1 و 3 و 5 باستخدام متجه من الفهارس
# 2. طباعة العناصر من الموقع 2 إلى الموقع 4 باستخدام عامل النقطتين الرأسيتين (:)
# 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()أساسيات تحويل أنواع البياناتمراجعة - حاسبة العمرمراجعة - صح أم خطأ