Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​Комментарии о действиях dplyr глаголов В интерактивном анализе данных полезно видеть, что именно произошло в результате выполнения какой либо манипуляции над данными. Пакет tidylog оборачивает глаголы пакетов dplyr и tidyr, таким образом, что они выводят в консоль дополнительную, полезную информацию по выполняемому преобразованию данных. Для начала подключите пакет tidylog после подключения dplyr/tidyr.
 
library("dplyr")
library("tidyr")
library("tidylog", warn.conflicts = FALSE)
Далее используете глаголы из dplyr/tidyr, но при этом в консоль будет выводиться дополнительная информация о каждой операции.
 
filtered <- filter(mtcars, cyl == 4)
#> filter: removed 21 rows (66%), 11 rows remaining
mutated <- mutate(mtcars, new_var = wt ** 2)
#> mutate: new variable 'new_var' (double) with 29 unique values and 0% NA
Более полезным tidylog может быть при использовании конвейера:
 
summary <- mtcars %>%
    select(mpg, cyl, hp, am) %>%
    filter(mpg > 15) %>%
    mutate(mpg_round = round(mpg)) %>%
    group_by(cyl, mpg_round, am) %>%
    tally() %>%
    filter(n >= 1)
#> select: dropped 7 variables (disp, drat, wt, qsec, vs, …)
#> filter: removed 6 rows (19%), 26 rows remaining
#> mutate: new variable 'mpg_round' (double) with 15 unique values and 0% NA
#> group_by: 3 grouping variables (cyl, mpg_round, am)
#> tally: now 20 rows and 4 columns, 2 group variables remaining (cyl, mpg_round)
#> filter (grouped): no rows removed
В данном случае из выведенного лога мы видим, что последняя операция filter(n >= 1) на самом деле не произвела абсолютно никаких действий. Естественно в связи с тем, что tidylog является обёрткой над глаголами dplyr и tidyr, он имеет некоторые накладные расходы, т.е. функции с логированием выполняются немного дольше, особенно это чувствительно при использовании join_*() операций. Если вы хотите использовать обычный глагол (не обёртку), для какой то дорогостоящей операции, просто укажите это через двоеточия, например dplyr::left_join(). Ссылки: - Больше примеров кода доступны в README пакета tidylog - Сравнение скорости выполнения вычислений между чистым dplyr и tidylog #заметки_по_R