Apply(), lapply(), sapply(), Tapply() الدالة في R مع الأمثلة

يهدف هذا البرنامج التعليمي إلى تقديم مجموعة وظائف application(). تعتبر وظيفة Apply () هي الوظيفة الأساسية في جميع المجموعات. سوف نتعلم أيضًا sapply() وlapply() وtapply(). يمكن عرض مجموعة التطبيق كبديل للحلقة.

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

تطبيق () وظيفة

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

تأخذ هذه الدالة 3 وسيطات:

apply(X, MARGIN, FUN)
Here:
-x: an array or matrix
-MARGIN:  take a value or range between 1 and 2 to define where to apply the function:
-MARGIN=1`: the manipulation is performed on rows
-MARGIN=2`: the manipulation is performed on columns
-MARGIN=c(1,2)` the manipulation is performed on rows and columns
-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>

أبسط مثال هو جمع مصفوفة على كافة الأعمدة. سيطبق الكود المطبق (m1، 2، sum) دالة المجموع على المصفوفة 5 × 6 ويعيد مجموع كل عمود يمكن الوصول إليه في مجموعة البيانات.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

الإخراج:

تطبيق () مثال على الوظيفة في R
تطبيق مثال على الدالة () في R

أفضل الممارسات: قم بتخزين القيم قبل طباعتها على وحدة التحكم.

وظيفة لابلي ().

لابلي() تعتبر الدالة مفيدة لتنفيذ العمليات على كائنات القائمة وتقوم بإرجاع كائن قائمة بنفس طول المجموعة الأصلية. تُرجع الدالة lappy()‎ قائمة بطول مماثل لكائن قائمة الإدخال، وكل عنصر فيها هو نتيجة تطبيق FUN على العنصر المقابل في القائمة. يأخذ Lapply في R القائمة أو المتجه أو إطار البيانات كمدخل ويعطي الإخراج في القائمة.

lapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x	

l في lapply() يرمز إلى القائمة. الفرق بين lapply() و application() يكمن في إرجاع الإخراج. إخراج lapply() عبارة عن قائمة. يمكن استخدام lapply() لكائنات أخرى مثل إطارات البيانات والقوائم.

لا تحتاج الدالة lapply() إلى MARGIN.

يمكن أن يكون أحد الأمثلة السهلة للغاية هو تغيير قيمة سلسلة المصفوفة إلى أحرف صغيرة باستخدام دالة أقل. نقوم ببناء مصفوفة بأسماء الأفلام الشهيرة. الاسم مكتوب بالأحرف الكبيرة.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")
movies_lower <-lapply(movies, tolower)
str(movies_lower)

الإخراج:

## List of 4
## $:chr"spyderman"
## $:chr"batman"
## $:chr"vertigo"
## $:chr"chinatown"

يمكننا استخدام unlist() لتحويل القائمة إلى متجه.

movies_lower <-unlist(lapply(movies,tolower))
str(movies_lower)

الإخراج:

##  chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

وظيفة ساببلي ().

سابلي() تأخذ الوظيفة القائمة أو المتجه أو إطار البيانات كمدخل وتعطي الإخراج في المتجه أو البخور. إنه مفيد للعمليات على كائنات القائمة ويعيد كائن قائمة بنفس طول المجموعة الأصلية. تقوم دالة Sapply في R بنفس وظيفة وظيفة lapply() ولكنها تُرجع متجهًا.

sapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x

يمكننا قياس الحد الأدنى للسرعة ومسافات التوقف للسيارات من مجموعة بيانات السيارات.

dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars

الإخراج:

## $speed
## [1] 4
## $dist
## [1] 2
smn_cars

الإخراج:

## speed  dist 
##     4     2
lmxcars <- lapply(dt, max)
smxcars <- sapply(dt, max)
lmxcars

الإخراج:

## $speed
## [1] 25
## $dist
## [1] 120
smxcars

الإخراج:

## speed  dist 
##    25   120

يمكننا استخدام وظيفة المستخدم المضمنة في lapply() أو sapply(). نقوم بإنشاء دالة اسمها avg لحساب متوسط ​​الحد الأدنى والحد الأقصى للمتجه.

avg <- function(x) {  
  ( min(x) + max(x) ) / 2}
fcars <- sapply(dt, avg)
fcars

الناتج

## speed  dist
##  14.5  61.0

يعد Sapply في R أكثر كفاءة من lapply() في المخرجات التي يتم إرجاعها لأن sapply() يخزن القيم مباشرة في متجه. في المثال التالي، سنرى أن هذا ليس هو الحال دائمًا.

يمكننا تلخيص الفرق بين application() وsapply() وlapply() في ما يليwing الجدول:

المسمى الوظيفي الحجج هدف إدخال الناتج
تطبيق تطبيق(x، الهامش، المرح) تطبيق دالة على الصفوف أو الأعمدة أو كليهما إطار البيانات أو المصفوفة ناقلات، قائمة، مجموعة
لابلي لابلي (X، FUN) تطبيق دالة على كافة عناصر الإدخال القائمة أو المتجه أو إطار البيانات قائمة
sapply سابلي (X، المرح) تطبيق دالة على كافة عناصر الإدخال القائمة أو المتجه أو إطار البيانات ناقلات أو مصفوفة

ناقلات شريحة

يمكننا استخدام lapply() أو sapply() القابلة للتبديل لتقسيم إطار البيانات. نقوم بإنشاء دالة، below_average()، تأخذ متجهًا للقيم الرقمية وترجع متجهًا يحتوي فقط على القيم التي تكون أعلى من المتوسط ​​تمامًا. قمنا بمقارنة كلا النتيجتين مع الدالة المتطابقة ().

below_ave <- function(x) {  
    ave <- mean(x) 
    return(x[x > ave])
}
dt_s<- sapply(dt, below_ave)
dt_l<- lapply(dt, below_ave)
identical(dt_s, dt_l)

الإخراج:

## [1] TRUE

وظيفة تابلي ().

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

tapply(X, INDEX, FUN = NULL)
Arguments:
-X: An object, usually a vector
-INDEX: A list containing factor
-FUN: Function applied to each element of x

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

لفهم كيفية عملها، دعونا نستخدم مجموعة بيانات القزحية. تحظى مجموعة البيانات هذه بشهرة كبيرة في عالم التعلم الآلي. الغرض من مجموعة البيانات هذه هو التنبؤ بفئة كل نوع من أنواع الزهور الثلاثة: Sepal، Versicolor، Virginica. تجمع مجموعة البيانات معلومات عن كل نوع حول طوله وعرضه.

كعمل سابق، يمكننا حساب متوسط ​​الطول لكل نوع. يعد Tapply in R طريقة سريعة لإجراء هذا الحساب.

data(iris)
tapply(iris$Sepal.Width, iris$Species, median)

الإخراج:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0