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

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

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

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

5 лет назад
Открыть в
​​Что такое ленивое чтение, и зачем оно надо Недавно я рассказывал про эксперименты, которые проводились над пакетом readr. В их основе лежало ленивое чтение данных. Что такое ленивое чтение Ленивое чтение - позволяет не считывать весь файл командой чтения, вместо этого файл индексируется, и R запоминает расположение каждой строки данных. Процесс чтения инициализируется только в момент обращения к данным, и считывает только необходимый для выполняемой операции фрагмент данных. Пример Давайте рассмотрим небольшой пример кода:
library(tidyverse)

df <- read_csv(readr_example("mtcars.csv"), lazy = TRUE)

df |>
  filter(hp > 200) |>
  summarise(mean(mpg))

Изображение к этому посту показывает какие данные readr в этом случае будет считывать, на схеме эти данные изображены оранжевым цветом. Горизонтальная полоса вверху - это заголовки таблицы. Вертикальная полоса - это столбец hp, который загружается целиком в связи с тем, что используется в функции filter(). А отдельные оранжевые ячейки это данные столбца mpg, только по тем строкам, которые остались после фильтрации по условию hp > 200. Как видите, в зависимости от того, что вы делаете с файлом, ленивое чтение может значительно уменьшить потребляемый объём памяти файлом, к которому вам в конечном итоге потребуется доступ. Активация ленивого чтения в vroom и readr В пакете vroom ленивое чтение применяется по умолчанию. В readr активируется опцией options(readr.read_lazy = TRUE) или аргументом lazy, как в приведённом выше примере кода. Проблема ленивого чтения на Windows В одном из предыдущих постов я более подробно писал о проблеме ленивого чтения на Windows. Заключается она в том, что при ленивом чтении блокируется файловый дескриптор, и другие процессы и программы в этот момент не могут получить доступ к файлу, что может вызвать ошибки. Ссылки: - пример кода и изображение заимствованы из статьи "Eager vs lazy reading in readr 2.1.0" #заметки_по_R