بسم الله الرحمن الرحيم

Lists

تاريخ النشر : Oct. 7, 2022

على عكس المتجهات ، يمكن أن تحتوي القوائم على مكونات من أنواع مختلفة ، تمامًا كما يمكن أن تحتوي قوائم المهام الخاصة بك على فئات مختلفة من المهام. سيعلمك هذا الفصل كيفية إنشاء هذه القوائم وتسميتها وتجميعها.


على عكس المتجهات ، يمكن أن تحتوي القوائم على مكونات من أنواع مختلفة ، تمامًا كما يمكن أن تحتوي قوائم المهام الخاصة بك على فئات مختلفة من المهام. سيعلمك هذا الفصل كيفية إنشاء هذه القوائم وتسميتها وتجميعها.

Lists, why would you need them?

القوائم ، لماذا تحتاجها؟

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

  • المتجهات (مصفوفة ذات بعد واحد): يمكن أن تحتوي على قيم رقمية أو شخصية أو قيم منطقية. العناصر الموجودة في المتجه لها نفس نوع البيانات.
  • المصفوفات (مصفوفة ثنائية الأبعاد): يمكن أن تحتوي على قيم رقمية أو شخصية أو قيم منطقية. العناصر الموجودة في المصفوفة لها نفس نوع البيانات.
  • إطارات البيانات (كائنات ثنائية الأبعاد): يمكن أن تحتوي على قيم رقمية أو شخصية أو منطقية. تحتوي جميع العناصر داخل العمود على نفس نوع البيانات ، ولكن يمكن أن تكون الأعمدة المختلفة من نوع بيانات مختلف.

تشبه القائمة الموجودة في R قائمة مهامك في العمل أو المدرسة: من المرجح أن تختلف العناصر المختلفة في تلك القائمة من حيث الطول والسمات ونوع النشاط الذي يجب القيام به.

تسمح لك القائمة في R بجمع مجموعة متنوعة من الكائنات تحت اسم واحد (أي اسم القائمة) بطريقة مرتبة. يمكن أن تكون هذه الكائنات عبارة عن مصفوفات ومتجهات وإطارات بيانات وحتى قوائم أخرى وما إلى ذلك. ولا يلزم حتى أن تكون هذه الكائنات مرتبطة ببعضها البعض بأي شكل من الأشكال.

يمكنك القول أن القائمة هي نوع من أنواع البيانات الفائقة: يمكنك تخزين أي جزء من المعلومات عمليًا فيها!

list()

إنشاء قائمة

دعونا ننشئ قائمتنا الأولى! لإنشاء قائمة ، استخدم الدالة list ():

my_list <- list(comp1، comp2 ...)

arguments دالة list

هي مكونات القائمة. تذكر أن هذه المكونات يمكن أن تكون مصفوفات ومتجهات وقوائم أخرى

# Vector with numerics from 1 up to 10
my_vector <- 1:10 

# Matrix with numerics from 1 up to 9
my_matrix <- matrix(1:9, ncol = 3)

# First 10 elements of the built-in data frame mtcars
my_df <- mtcars[1:10,]

# Construct list with these different elements:
my_list <-list(my_vector,my_matrix,my_df)

تسمية قائمة

تمامًا كما هو الحال في قائمة المهام الخاصة بك ، فأنت تريد تجنب عدم معرفة أو تذكر ما تمثله مكونات قائمتك. لهذا السبب يجب أن تطلق عليهم أسماء:

my_list <- list (name1 = your_comp1،

name2 = your_comp2)

دعنا نقوم بإنشاء قائمة بالمكونات المسماة name1 و name2 وما إلى ذلك. إذا كنت تريد تسمية القوائم الخاصة بك بعد إنشائها ، فيمكنك استخدام دالة sname () كما فعلت مع المتجهات. الأوامر التالية مكافئة تمامًا للمهمة أعلاه:

my_list <- list(your_comp1، your_comp2)

names(my_list) <- c ("name1"، "name2")

# Vector with numerics from 1 up to 10
my_vector <- 1:10 

# Matrix with numerics from 1 up to 9
my_matrix <- matrix(1:9, ncol = 3)

# First 10 elements of the built-in data frame mtcars
my_df <- mtcars[1:10,]

# Adapt list() call to give the components names
my_list <- list(my_vector, my_matrix, my_df)

# Print out my_list
names(my_list) <- c("vec", "mat", "df")
my_list

إنشاء قائمة مسماة (2)

نظرًا لكونك معجبًا كبيرًا بالأفلام (تذكر وظيفتك في LucasFilms) ، فإنك تقرر البدء في تخزين المعلومات حول الأفلام الجيدة بمساعدة القوائم.

ابدأ بإنشاء قائمة لفيلم "The Shining". لقد قمنا بالفعل بإنشاء المتغيرات mov ، و act ، و rev في مساحة العمل R الخاصة بك. لا تتردد في التحقق منها في وحدة التحكم.

# The variables mov, act and rev are available

# Finish the code to build shining_list
shining_list <- list(moviename = mov,actors=act,reviews=rev)
Selecting elements from a list

اختيار العناصر من القائمة

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

إحدى الطرق لتحديد مكون هي استخدام الموضع المرقم لهذا المكون. على سبيل المثال ، "للاستيلاء" على المكون الأول من shining_list الذي تكتبه

shining_list [[1]]

من المهم أن تتذكر: لتحديد عناصر من المتجهات ، يمكنك استخدام أقواس مربعة مفردة: []. لا تخلط بينهم!

يمكنك أيضًا الرجوع إلى أسماء المكونات ، باستخدام [[]] أو بعلامة $. سيحدد كلاهما إطار البيانات الذي يمثل المراجعات:

shining_list[["reviews"]]
shining_list$reviews

إلى جانب تحديد المكونات ، غالبًا ما تحتاج إلى تحديد عناصر معينة من هذه المكونات. على سبيل المثال ، مع shining_list [[2]] [1] تختار من المكون الثاني ، actors (shining_list [[2]]) ، العنصر الأول ([1]). عندما تكتب هذا في وحدة التحكم ، سترى أن الإجابة هي جاك نيكلسون.

# shining_list is already pre-loaded in the workspace

# Print out the vector representing the actors
shining_list$actors

# Print the second element of the vector representing the actors

shining_list$actors[2]
shining_list$actors
[1] "Jack Nicholson"   "Shelley Duvall"   "Danny Lloyd"      "Scatman Crothers"
[5] "Barry Nelson"    
# Print the second element of the vector representing the actors
shining_list$actors[[2]]
[1] "Shelley Duvall"
Creating a new list for another movie

إنشاء قائمة جديدة لفيلم آخر

لقد عثرت على تقييمات لفيلم آخر أحدث لـ Jack Nicholson: The Departed!

التقييم التعليقات

4.6 أود مشاهدته مرة أخرى

5 مذهل!

4.8 أحببته

5 من أفضل الأفلام

4.2 مؤامرة رائعة

سيكون من المفيد جمع كل المعلومات حول الفيلم معًا ، مثل العنوان والممثلين والمراجعات في متغير واحد. نظرًا لأن هذه الأجزاء من البيانات هي أشكال مختلفة ، فمن الطبيعي دمجها في متغير قائمة.

movie_title ، التي تحتوي على عنوان الفيلم ، و movie_actors ، التي تحتوي على أسماء بعض الممثلين في الفيلم ، متوفرة في مساحة العمل الخاصة بك.

# Use the table from the exercise to define the comments and scores vectors
scores <- c(4.6, 5, 4.8, 5, 4.2)
comments <- c("I would watch it again", "Amazing!", "I liked it", "One of the best movies", "Fascinating plot")

# Save the average of the scores vector as avg_review
avg_review <- mean(scores)

# Combine scores and comments into the reviews_df data frame
reviews_df <- data.frame(scores, comments)

# Create and print out a list, called departed_list
departed_list <- list(movie_title, movie_actors, reviews_df, avg_review)
departed_list
departed_list
[[1]]
[1] "The Departed"

[[2]]
[1] "Leonardo DiCaprio" "Matt Damon"        "Jack Nicholson"   
[4] "Mark Wahlberg"     "Vera Farmiga"      "Martin Sheen"     

[[3]]
  scores               comments
1    4.6 I would watch it again
2    5.0               Amazing!
3    4.8             I liked it
4    5.0 One of the best movies
5    4.2       Fascinating plot

[[4]]
[1] 4.72

العودة إلي Introduction to R (تلخيصات من DATA CAMP)