Функция read_lines()
в пакете readr
быстрее, чем base::readLines()
, и может использоваться для указания начальной и конечной строки для чтения. Например:
library(readr)
myFile <- "./data/veryLargeFile.txt"
first25K <- read_lines(myFile,skip=0,n_max = 25000)
second25K <- read_lines(myFile,skip=25000,n_max=25000)
Вот полный рабочий пример использования набора данных NOAA StormData. Файл описывает местоположение, тип события и информацию о повреждениях для более чем 900 000 экстремальных погодных явлений в Соединенных Штатах в период с 1950 по 2011 год. Мы будем использовать readr::read_lines()
для чтения первых 50 000 строк в группах по 25 000 после загрузки и разархивирования файла.
Предупреждение: размер zip-файла составляет около 50 МБ.
library(R.utils)
library(readr)
dlMethod <- "curl"
if(substr(Sys.getenv("OS"),1,7) == "Windows") dlMethod <- "wininet"
url <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(url,destfile='StormData.csv.bz2',method=dlMethod,mode="wb")
bunzip2("StormData.csv.bz2","StormData.csv")
first25K <- read_lines("StormData.csv",skip=0,n_max = 25000)
second25K <- read_lines("StormData.csv",skip=25000,n_max=25000)
... и объекты, просматриваемые в средстве просмотра среды RStudio:
![enter image description here](https://i.stack.imgur.com/nmPeE.png)
Вот временные характеристики производительности, сравнивающие base::readLines()
с readr::read_lines()
на ноутбуке HP Spectre x-360 с процессором Intel i7-6500U.
> # check performance of readLines()
> system.time(first25K <- readLines("stormData.csv",n=25000))
user system elapsed
0.05 0.00 0.04
> # check performance of readr::read_lines()
> system.time(first25K <- read_lines("StormData.csv",skip=0,n_max = 25000))
user system elapsed
0.00 0.00 0.01