Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

العمليات الحسابية وإعادة تدوير المتجهات

جزء من قسم Fundamentals في رحلة R على Coddy — الدرس 69 من 78.

عندما تقوم بإجراء عمليات حسابية بين متجهين لهما نفس الطول، يقوم R بتطبيق العملية عنصراً بعنصر:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

المخرجات:

[1] 11 22 33

ولكن ماذا يحدث عندما تكون للمتجهات أطوال مختلفة؟ تستخدم لغة R سلوكاً يسمى إعادة التدوير (recycling). يتم تكرار المتجه الأقصر ليتناسب مع طول المتجه الأطول:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

المخرجات:

[1]  10 200  30 400  50 600

هنا، تمت إعادة تدوير multiplier ليصبح c(10, 100, 10, 100, 10, 100) قبل عملية الضرب. هذا مفيد بشكل خاص عند التعامل مع قيمة واحدة:

prices <- c(10, 20, 30)
print(prices * 1.1)

المخرجات:

[1] 11 22 33

يتم تكرار القيمة المفردة 1.1 لتتناسب مع طول prices. كن حذرًا عندما لا يكون طول المتجه الأطول مضاعفًا لطول المتجه الأقصر، حيث سيستمر R في تنفيذ العملية ولكنه قد يُصدر تحذيرًا بشأن التكرار الجزئي (partial recycling).

challenge icon

التحدي

سهل

سوف تتلقى سطرين من المدخلات:

  1. قائمة من الأرقام مفصولة بفاصلة تمثل القيم الأساسية (على سبيل المثال، 10,20,30,40,50,60)
  2. قائمة من المضاعفات مفصولة بفاصلة (على سبيل المثال، 2,5)

باستخدام حساب المتجهات وإعادة التدوير (recycling):

  1. أنشئ متجهًا عدديًا من القيم الأساسية
  2. أنشئ متجهًا عدديًا من المضاعفات
  3. اضرب القيم الأساسية في المضاعفات (سيقوم R بإعادة تدوير المتجه الأقصر)
  4. اطبع نتيجة عملية الضرب
  5. أضف 100 إلى كل عنصر من عناصر القيم الأساسية الأصلية (إعادة تدوير قيمة واحدة)
  6. اطبع نتيجة عملية الجمع
  7. اطرح متجه المضاعفات من متجه القيم الأساسية
  8. اطبع نتيجة عملية الطرح

على سبيل المثال، إذا كانت المدخلات هي:

5,10,15,20,25,30
3,7

يجب أن تكون المخرجات:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

التفسير:

  • الضرب: يتم إعادة تدوير المضاعفات c(3, 7) لتصبح c(3, 7, 3, 7, 3, 7)، مما ينتج عنه 5*3, 10*7, 15*3, 20*7, 25*3, 30*7
  • الجمع: يتم إعادة تدوير القيمة الواحدة 100 لتضاف إلى كل عنصر
  • الطرح: يتم إعادة تدوير المضاعفات مرة أخرى، مما ينتج عنه 5-3, 10-7, 15-3, 20-7, 25-3, 30-7

ورقة مرجعية

عند إجراء العمليات الحسابية بين المتجهات ذات الأطوال المختلفة، تستخدم لغة R إعادة التدوير (recycling) - حيث يتم تكرار المتجه الأقصر ليتناسب مع طول المتجه الأطول:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

المخرجات:

[1]  10 200  30 400  50 600

يتم إعادة تدوير المتجه multiplier إلى c(10, 100, 10, 100, 10, 100) قبل عملية الضرب.

تعد إعادة تدوير القيمة الواحدة مفيدة بشكل خاص:

prices <- c(10, 20, 30)
print(prices * 1.1)

المخرجات:

[1] 11 22 33

يتم إعادة تدوير القيمة 1.1 لتتناسب مع طول prices.

ملاحظة: قد تُصدر لغة R تحذيراً عندما لا يكون طول المتجه الأطول مضاعفاً لطول المتجه الأقصر.

جرّب بنفسك

# قراءة المدخلات
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# تحليل القيم المفصولة بفاصلة إلى متجهات عددية
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: اكتب كودك أدناه
# 1. اضرب base_values في multipliers (ستحدث عملية التكرار "recycling" تلقائياً)
# 2. اطبع نتيجة الضرب
# 3. أضف 100 إلى كل عنصر في base_values
# 4. اطبع نتيجة الجمع
# 5. اطرح multipliers من base_values
# 6. اطبع نتيجة الطرح
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals