Получи случайную криптовалюту за регистрацию!

​​Упрощенная манипуляция списками в R с помощью пакета listr | R4marketing | канал Алексея Селезнёва | Язык R

​​Упрощенная манипуляция списками в R с помощью пакета listr

Пакет listr вошел в топ 40 опубликованных на CRAN пакетов в апреле 2022 года. Основной целью пакета является упрощение простых операций по манипуляции списками, сделать синтаксис этих операций легко читаемым и дружественным к пайпам.

Функции listr:
● list_append() - Добавить элемент в конец списка
● list_bind() - Объединить элементы списка, и позволяет указать те элементы, которые необходимо извлечь после объединения
● ist_bind_all() - Объединить элементы списка, и извлекает все элементы после объединения
● list_extract() - Извлечение элементов списка
● list_flatten() - Выравнивание вложенных уровней списка
● list_insert() - Добавить элемент в список, на указанную позицию
● list_is_compatible_class() - Проверяет принадлежность всех элементов вектора одному классу, данная функция считает совместимые классы (например data.frame, tibble, data.table) за один класс.
● list_is_same_class() - Проверяет принадлежность всех элементов вектора одному классу, данная функция считает совместимые классы (например data.frame, tibble, data.table) как разные классы.
● list_join_df() - Объединить фреймы, которые являются элементами списка по ключу, "сджойнить"
● list_name_to_df() - Добавляет имена элементов в виде дополнительного стобца фрейма, функция используется только со списом состоящим из фреймов.
● list_prepend() - Добавить элемент в начало списка
● list_remove() - Удалить элемент списка
● list_rename() - Переименовать элементы именованного списка
● list_select() - Выбор отдельных частей списка

Пример:

library(listr)

# тестовые данные
by_cyl <- split(mtcars, mtcars$cyl)

# переименовываем элементы списка
by_cyl <- by_cyl |>
list_rename("cyl4" = `4`, "cyl6" = `6`, "cyl8" = `8`)

# выбор элементов списка
by_cyl |> list_select(1, 2)
cyl4 <- by_cyl |> list_extract(cyl4)

# удаляем элемент списка
by_cyl <- by_cyl |> list_remove(cyl4)

# добавляем элемент списка
by_cyl <- by_cyl |> list_prepend(cyl4, name = "cyl4")

# объединяем таблицы в списке
by_cyl |>
list_bind(cyl4, cyl6, what = "rows", name = "cyl4_and_6")

# объединяем таблицы по ключу
dfl <- list(
data.frame(idx = sample(100, 30), x = rnorm(30)),
data.frame(idx = sample(100, 30), y = rnorm(30)),
data.frame(idx = sample(100, 30), z = rnorm(30))
)

list_join_df(dfl, join_type = 'inner', by = 'idx')

# Проверяем принадлежат ли отдельные элементы списка одному классу
dfl <- list(
tibble::tibble(idx = 21:40, y = rnorm(20)),
data.frame(idx = 21:40, y = rnorm(20)),
data.frame(idx = 41:60, y = rnorm(20))
)

list_is_same_class(dfl)
list_is_compatible_class(dfl)

Для операций со списками есть и более функциональный пакет - `rlist`, но в рамках одного поста в канале рассказать о нём сложно, поэтому о нём я либо запишу видео урок, либо статью.

Ссылки:
- Большая часть примеров кода взяты из виньетки "An Introduction to listr"

#заметки_по_R