Notice: file_put_contents(): Write of 17170 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 4096 of 21266 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
Статистика и R в науке и аналитике@stats_for_science P.66
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: |

End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance. On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. Those being doxxed include outgoing Chief Executive Carrie Lam Cheng Yuet-ngor, Chung and police assistant commissioner Joe Chan Tung, who heads police's cyber security and technology crime bureau. The best encrypted messaging apps "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from sg


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