Изменения

R:Оптимизация/Импорт данных

364 байта добавлено, 13:48, 7 апреля 2014
м
Формат RData/Rds
{{r-code|code=<nowiki>> tmp.csv <- tempfile(fileext = "csv")
> tmpttmp.RData Rds <- tempfile(fileext = "RDataRds")> microbenchmark(text = write.tablecsv(DF, file = tmp.csv, sep = ";", row.names = FALSE),+ binary = savesaveRDS(DF, file = tmp.RDataRds))
Unit: seconds
expr min lq median uq max neval
text 4.658 651 4.737 702 4.755 727 4.825 5756 4.526 837 100 binary 2.202 461 2.203 496 2.205 501 2.210 506 2.248 548 100</nowiki>}} Удостоверимся в идентичности исходных и импортированных данных: {{r-code|code=<nowiki>Вставьте сюда текст, который не нужно форматировать</nowiki>}}
Размеры полученных файлов в мегабайтах:
{{r-code|code=<nowiki>> file.info(tmp.RDataRds)$size / 1024^2[1] 2524.5
> file.info(tmp.csv)$size / 1024^2
[1] 60.77</nowiki>}}
Теперь сравним скорость чтения данных с помощью функций <code>read.table()</code>, <code>fread()</code> и <code>load()</code>:
{{r-code|code=<nowiki>> microbenchmark(defaults = read.tablecsv(tmp.csv, sep = ";", header = TRUE),+ ompimize = read.tablecsv(tmp.csv, sep = ";", header = TRUE, nrows = N, comment.char = "",
+ colClasses = c("integer", "integer", "factor", "numeric", "numeric", "numeric")),
+ fread = fread(tmp.csv),
+ load readRDS = loadreadRDS(tmp.RDataRds))
Unit: milliseconds
expr min lq median uq max neval
defaults 39404326.6 40328 4708.5 40673 6109.2 41551 6977.4 49032 8516.4 5 100 ompimize 28472832.8 29231 2851.3 2929.5 29410 2935.6 36323175.5 3 3529.0 100 fread 533521.1 524.5 534.6 2 535537.1 4 536927.3 1220.1 6 100 load readRDS 177173.1 5 177174.2 177174.2 4 177176.6 4 268480.6 8 100</nowiki>}}
Отметим, что запись и чтение производилась в файловую систему [http://ru.wikipedia.org/wiki/Tmpfs tmpfs], размещённую непосредственно в оперативной памяти.
* Скорость записи превышает скорость записи в текстовый формат;
* Скорость чтения значительно превышает скорость чтения текстового формата;
* Размер полученного файла значительного меньше текстового формата<ref>Начиная с версии 2.10 функция <code>read.table()</code> может также читать сжатые gz, xz, bzip файлы. Но даже при максимальной степени сжатия размер сжатого csv-файла едва приближается к размеру RData-файла. При этом скорость чтения сжатого csv-файла приблизтельно приблизительно такая же как при чтении несжатого csv-файла.</ref>;* Возможность сохранять любые объекты: функции, векторы, таблицы данных, матрицы, списки.
Среди минусов модно отметить: