Lapply проти sapply в r: у чому різниця?
Функцію lapply() в R можна використовувати для застосування функції до кожного елемента списку, вектора або кадру даних і отримання відповідного списку .
Функцію sapply() також можна використовувати для застосування функції до кожного елемента списку, вектора або кадру даних, але в результаті вона повертає вектор .
У наступних прикладах показано, як використовувати кожну з цих функцій у R.
Приклад: як використовувати apply() у R
Наступний код показує, як використовувати функцію lapply() для множення кожного значення в кожному стовпці кадру даних на 2:
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 lapply(df, function (df) df*2) $x [1] 2 4 4 6 10 $y [1] 8 8 12 14 16 $z [1] 14 14 18 18 18
Зверніть увагу, що результатом є список.
Приклад: як використовувати sapply() у R
У наступному коді показано, як використовувати функцію sapply() для множення кожного значення в кожному стовпці кадру даних на 2:
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 sapply(df, function (df) df*2) X Y Z [1,] 2 8 14 [2,] 4 8 14 [3,] 4 12 18 [4,] 6 14 18 [5,] 10 16 18
Зверніть увагу, що результатом є векторна матриця.
Зверніть увагу, що ви можете використовувати as.data.frame() для повернення кадру даних замість матриці:
#multiply each value in each column by 2 and return a data frame as. data . frame (sapply(df, function (df) df*2)) X Y Z 1 2 8 14 2 4 8 14 3 4 12 18 4 6 14 18 5 10 16 18
Коли використовувати lapply() або sapply()
У 99% випадків ви будете використовувати sapply() , тому що має сенс повертати вектор або матрицю.
Однак у рідкісних випадках вам може знадобитися замість цього використовувати lapply() , якщо ви хочете, щоб результатом був список.
Зверніть увагу, що sapply() і lappy() виконують однакові операції з вектором, матрицею або кадром даних. Єдина відмінність полягає в класі повернутого об’єкта.
Додаткові ресурси
Як застосувати функцію до кожного рядка кадру даних у R
Як використовувати функцію colSums() у R
Як використовувати функцію rowSums() у R