0Pricing
R Academy · درس

فهرسة المصفوفات واختيار أجزائها

يمكنك الوصول إلى الصفوف والأعمدة والعناصر باستخدام الصيغة ‎[row, col]‎.

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

أساسيات فهرسة المصفوفات

للوصول إلى عناصر المصفوفة، استخدموا الصيغة m[row, col]. تبدأ فهارس الصفوف والأعمدة من 1 في R. الفاصلة مطلوبة — وحذفها يجعل التعامل مع المصفوفة كمتجه مسطح.

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)

# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')

# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')

استخراج صف كامل

اتركوا فهرس العمود فارغًا لاستخراج صف كامل. تكون النتيجة متجهًا (إذ يُحذف بُعد المصفوفة). ومع ذلك، يجب أن تبقى الفاصلة موجودة.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)

# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')

استخراج عمود كامل

اتركوا فهرس الصف فارغًا لاستخراج عمود كامل. وكما في استخراج الصفوف، تكون النتيجة متجهًا. ويجب أن تبقى الفاصلة الفاصلة بين موضعي الصف والعمود موجودة.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean:  ', mean(math_scores), '
')
cat('Math max:   ', max(math_scores), '
')

تحديد صفوف وأعمدة متعددة

استخدموا متجهًا من الفهارس لاستخراج عدة صفوف أو أعمدة دفعة واحدة. تكون النتيجة مصفوفة فرعية (وتظل مصفوفة لا متجهًا)، مع الحفاظ على البنية الثنائية الأبعاد.

m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)

# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')

الوصول باستخدام اسم الصف أو العمود

إذا كانت للمصفوفة أسماء للصفوف والأعمدة، يمكنكم الفهرسة بالاسم بدلًا من الموضع. وهذا أوضح وأسهل في التعامل مع إعادة ترتيب الصفوف أو الأعمدة.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE,
                 dimnames = list(
                   c('Alice', 'Bob', 'Carol'),
                   c('Math', 'Sci', 'Eng', 'Hist')
                 ))

# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])

الفهرسة المنطقية للمصفوفات

يمكنكم استخدام متجه منطقي (أو مصفوفة منطقية) لتحديد العناصر. وعند استخدام متجه منطقي في أحد البعدين، فإنه يحدد الصفوف أو الأعمدة التي تكون قيمتها TRUE.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')

# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)

الفهرسة السالبة — استبعاد الصفوف أو الأعمدة

ضعوا البادئة - قبل الفهرس لاستبعاد ذلك الصف أو العمود. وهذه طريقة واضحة لحذف صفوف أو أعمدة محددة من دون سرد جميع الصفوف أو الأعمدة التي تريدون الاحتفاظ بها.

m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)

# Drop row 2
cat('Without row 2:
')
print(m[-2, ])

# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])

عنصر واحد باستخدام drop = FALSE

افتراضيًا، يؤدي استخراج صف أو عمود واحد إلى حذف البعد (فتُعاد النتيجة كمتجه). استخدموا drop = FALSE للإبقاء على النتيجة كمصفوفة (مع الحفاظ على بنية الصفوف والأعمدة).

m <- matrix(1:9, nrow = 3, ncol = 3)

# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
')  # numeric (vector)

# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')

استبدال القيم باستخدام الفهرس

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

m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)

# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)

# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)

الفهرسة الخطية (المسطحة)

تُخزَّن المصفوفة داخليًا كمتجه مسطح (عمودًا تلو الآخر). ويمكنكم الوصول إلى العناصر باستخدام فهرس صحيح واحد وفق هذا الترتيب المسطح. ويفيد ذلك أحيانًا في العمليات الجماعية.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)

# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')

# Replace flat index 4
m[4] <- 99
print(m)

ملخص الفهرسة

مرجع سريع لفهرسة المصفوفات في R:

  • m[r, c] — عنصر واحد في الصف r والعمود c
  • m[r, ] — الصف r كاملًا
  • m[, c] — العمود c كاملًا
  • m[c(r1,r2), c(c1,c2)] — مصفوفة فرعية
  • m['name', 'name'] — الوصول باستخدام اسم البعد
  • m[-r, ] — استبعاد الصف r
  • m[logical_vec, ] — تحديد الصفوف منطقيًا
  • m[r, , drop=FALSE] — الإبقاء على النتيجة كمصفوفة
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,]  =', m[2,], '
')
cat('m[,3]  =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])

تحقق سريع

ماذا تُعيد m[-2, ] لمصفوفة m مكوّنة من 3 صفوف؟

مراجعة: فهرسة المصفوفات

أحسنتم! فيما يلي أهم ما تعلمتموه في هذا الدرس:

  • تستخدم m[r, c] الصف أولًا ثم العمود — ويفصل بين الموضعين فاصلة
  • اتركوا أحد الجانبين فارغًا (m[r, ] أو m[, c]) لاستخراج الصفوف أو الأعمدة كاملة
  • تستبعد الفهارس السالبة الصفوف أو الأعمدة
  • يمكن للمتجهات المنطقية تصفية الصفوف أو الأعمدة
  • تتيح الأبعاد المسماة الفهرسة بالاسم لمزيد من الوضوح
  • يمنع drop = FALSE فقدان الأبعاد عند استخراج صفوف أو أعمدة مفردة
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

for (subj in colnames(scores)) {
  best <- rownames(scores)[which.max(scores[, subj])]
  cat('Best in', subj, ':', best, '
')
}

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

هل درس «فهرسة المصفوفات واختيار أجزائها» مجاني؟

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

ماذا ستتعلم في «فهرسة المصفوفات واختيار أجزائها»؟

يمكنك الوصول إلى الصفوف والأعمدة والعناصر باستخدام الصيغة ‎[row, col]‎. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «فهرسة المصفوفات واختيار أجزائها»؟

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

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

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

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

  1. إنشاء المصفوفات باستخدام matrix()
  2. فهرسة المصفوفات واختيار أجزائها
  3. حسابات المصفوفات وعملياتها
  4. تبديل المصفوفات وإعادة تشكيلها
← العودة إلى R Academy