STATS_FOR_SCIENCE Telegram 66
Обновление purrr до версии 1.0

purrr - пакет в R из core tidyverse для замены циклов и функций семейства *apply(). Немного подробнее я писала здесь и скидывала туториал.

Вчера вышло видео Хэдли Викхама про обновление до 1.0 с объяснениями, что изменилось. Однако мне было удобнее прочитать документацию, и оказалось, что обновление вышло в конце прошлого года. Я обновила purrr до версии 1.0.1 и протестировала основные моменты, что изменилось. Давайте разберем.

- Функции для конвертации списков в датафрейм map_dfr()/map_dfc() и их аналоги map2_(), pmap() стали deprecated, то есть разработчики перестали поддерживать эти функции. Объясняется это тем, что они не являются настоящими map-функциями, поскольку в них не сохраняется один к одному соответствие инпута и аутпута. Вместо этого рекомендуется использовать сначала просто map(), а затем эксплицитно прописывать функцию list_rbind()/list_cbind() для соединения датафрейма по строкам/столбцам как в map_dfr()/map_dfc(), соответственно. Вот пример из документации:

paths |> map_dfr(read_csv, .id = "path")
# now
paths |>
map(read_csv) |>
list_rbind(names_to = "path")

Немного жаль этих функций, они были достаточно удобные, но альтернатива предлагается неплохая, на мой взгляд.

- Добавили progress bar для отслеживания времени выполнения функций. Реализуется это подачей аргумента .progress = TRUE в любую map функцию. Однако, если задача выполняется быстро, то прогресс бар не будет появляться (я проверила). Также можно прописать, что именно выполняется, подав строку в .progress, например
map(1:100, \(x) Sys.sleep(0.1), .progress = 'Saving plot')
Это мне очень понравилось, думаю, что буду использовать для долгих маппингов. Всегда приятно знать, что функция не упала, а выполняется и примерно понимать сколько осталось.

- Добавили функцию map_vec() для работы с любым типом векторов. map_vec() является расширением map_lgl(), map_int(), map_dbl() и map_chr() для произвольных типов векторов - например для факторов, даты и времени.

- Уходят от синтаксиса формулы для анонимных функций (~ .x + 1) к другому синтаксису: \(x) x + 1, и от магриттаровского пайпа %>% уходят к нативному |> (хотя это уже давно). Последнее аргументируется тем, что нативный пайп будет работать без подключения дополнительных пакетов, это важно например при разработке своих пакетов, чтобы не получать лишние зависимости. Синтаксис новых анонимных функций я вообще в первый раз вижу, но могу согласиться, что он выглядит более понятно, чем синтаксис формулы. Хотя я только привыкла к формуле, как снова надо переучиваться. Впрочем, старое доброе function(x) x + 1 в качестве анонимных функций тоже никто не отменял, и на мой взгляд это самый понятный синтаксис.

Пример работы нового синтаксиса анонимных функций:
# Previously we wrote
1:10 %>%
map(~ rnorm(10, .x)) %>%
map_dbl(mean)
#> [1] 0.5586355 1.8213041 2.8764412 4.1521664 5.1160393 6.1271905
#> [7] 6.9109806 8.2808301 9.2373940 10.6269104

# Now we recommend
1:10 |>
map(\(mu) rnorm(10, mu)) |>
map_dbl(mean)
#> [1] 0.4638639 2.0966712 3.4441928 3.7806185 5.3373228 6.1854820
#> [7] 6.5873300 8.3116138 9.4824697 10.4590034

Я разобрала наиболее интересные для меня изменения, это не все, поэтому рекомендую далее прочитать документацию самостоятельно.

#R #tidyverse #purrr
👍358👏1



tgoop.com/stats_for_science/66
Create:
Last Update:

Обновление purrr до версии 1.0

purrr - пакет в R из core tidyverse для замены циклов и функций семейства *apply(). Немного подробнее я писала здесь и скидывала туториал.

Вчера вышло видео Хэдли Викхама про обновление до 1.0 с объяснениями, что изменилось. Однако мне было удобнее прочитать документацию, и оказалось, что обновление вышло в конце прошлого года. Я обновила purrr до версии 1.0.1 и протестировала основные моменты, что изменилось. Давайте разберем.

- Функции для конвертации списков в датафрейм map_dfr()/map_dfc() и их аналоги map2_(), pmap() стали deprecated, то есть разработчики перестали поддерживать эти функции. Объясняется это тем, что они не являются настоящими map-функциями, поскольку в них не сохраняется один к одному соответствие инпута и аутпута. Вместо этого рекомендуется использовать сначала просто map(), а затем эксплицитно прописывать функцию list_rbind()/list_cbind() для соединения датафрейма по строкам/столбцам как в map_dfr()/map_dfc(), соответственно. Вот пример из документации:

paths |> map_dfr(read_csv, .id = "path")
# now
paths |>
map(read_csv) |>
list_rbind(names_to = "path")

Немного жаль этих функций, они были достаточно удобные, но альтернатива предлагается неплохая, на мой взгляд.

- Добавили progress bar для отслеживания времени выполнения функций. Реализуется это подачей аргумента .progress = TRUE в любую map функцию. Однако, если задача выполняется быстро, то прогресс бар не будет появляться (я проверила). Также можно прописать, что именно выполняется, подав строку в .progress, например
map(1:100, \(x) Sys.sleep(0.1), .progress = 'Saving plot')
Это мне очень понравилось, думаю, что буду использовать для долгих маппингов. Всегда приятно знать, что функция не упала, а выполняется и примерно понимать сколько осталось.

- Добавили функцию map_vec() для работы с любым типом векторов. map_vec() является расширением map_lgl(), map_int(), map_dbl() и map_chr() для произвольных типов векторов - например для факторов, даты и времени.

- Уходят от синтаксиса формулы для анонимных функций (~ .x + 1) к другому синтаксису: \(x) x + 1, и от магриттаровского пайпа %>% уходят к нативному |> (хотя это уже давно). Последнее аргументируется тем, что нативный пайп будет работать без подключения дополнительных пакетов, это важно например при разработке своих пакетов, чтобы не получать лишние зависимости. Синтаксис новых анонимных функций я вообще в первый раз вижу, но могу согласиться, что он выглядит более понятно, чем синтаксис формулы. Хотя я только привыкла к формуле, как снова надо переучиваться. Впрочем, старое доброе function(x) x + 1 в качестве анонимных функций тоже никто не отменял, и на мой взгляд это самый понятный синтаксис.

Пример работы нового синтаксиса анонимных функций:
# Previously we wrote
1:10 %>%
map(~ rnorm(10, .x)) %>%
map_dbl(mean)
#> [1] 0.5586355 1.8213041 2.8764412 4.1521664 5.1160393 6.1271905
#> [7] 6.9109806 8.2808301 9.2373940 10.6269104

# Now we recommend
1:10 |>
map(\(mu) rnorm(10, mu)) |>
map_dbl(mean)
#> [1] 0.4638639 2.0966712 3.4441928 3.7806185 5.3373228 6.1854820
#> [7] 6.5873300 8.3116138 9.4824697 10.4590034

Я разобрала наиболее интересные для меня изменения, это не все, поэтому рекомендую далее прочитать документацию самостоятельно.

#R #tidyverse #purrr

BY Статистика и R в науке и аналитике


Share with your friend now:
tgoop.com/stats_for_science/66

View MORE
Open in Telegram


Telegram News

Date: |

Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. Avoid compound hashtags that consist of several words. If you have a hashtag like #marketingnewsinusa, split it into smaller hashtags: “#marketing, #news, #usa.
from us


Telegram Статистика и R в науке и аналитике
FROM American