Комментарии о действиях 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