Изменения

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

42 байта убрано, 11:25, 7 апреля 2014
м
Нет описания правки
{{r-code|code=<nowiki>> tmp.csv <- tempfile(fileext=".csv") # генерируем имя и путь для временного файла
> write.csv2csv(DF, tmp.csv, row.names = FALSE)</nowiki>}}
Размер полученного файла составил:
Теперь мы можем сравнить производительность функции <code>read.table()</code> с параметрами по умолчанию и парамтерами, рекомендованными для увеличения производительности данной функции. Для этого нам понадобится пакет {{r-package|microbenchmark}}.
{{r-code|code=<nowiki>> microbenchmark(defaults = read.csv2csv(tmp.csv, header = TRUE),+ ompimize = read.csv2csv(tmp.csv, header = TRUE, nrows = N, comment.char = "",
+ colClasses = c("integer", "integer", "factor", "numeric", "numeric", "numeric")))
Unit: seconds
Обратим внимание на то, что результат работы сравниваемых вариантов функции <code>read.table()</code> абсолютно идентичен.
{{r-code|code=<nowiki>> identical(read.csv2csv(tmp.csv, header = TRUE),+ read.csv2csv(tmp.csv, header = TRUE, nrows = N, comment.char = "",
+ colClasses = c("integer", "integer", "factor", "numeric", "numeric", "numeric")))
[1] TRUE</nowiki>}}
> source("http://git.psylab.info/r-scripts/raw/master/proftable.R")
> Rprof(tmp.log, interval = 0.01)
> DF <- read.tablecsv(tmp.csv, sep = ";", header = TRUE)
> Rprof(NULL)
> proftable(tmp.log)
{{r-code|code=<nowiki>data.frame(scan(tmp.csv, what = list(a = integer(0), b = integer(0), c = character(0), d = numeric(0), e = numeric(0), f = numeric(0)),
nmax = N, sep = ";", dec = ",", quote = "\"", multi.line = FALSE, skip = 1L, quiet = TRUE))</nowiki>}}
Поясним некоторые моменты:
Ниже приведены результаты сравнения работы функций <code>read.table()</code> и <code>scan()</code>:
{{r-code|code=<nowiki>> microbenchmark(defaults = read.csv2csv(tmp.csv, header = TRUE),+ ompimize = read.csv2csv(tmp.csv, header = TRUE, nrows = N, comment.char = "",
+ colClasses = c("integer", "integer", "factor", "numeric", "numeric", "numeric")),
+ scan = data.frame(scan(tmp.csv, nmax = N, sep = ";", dec = ",", quote = "\"", multi.line = FALSE, skip = 1L, quiet = TRUE,
+ what = list(a = integer(0), b = integer(0), c = character(0), d = numeric(0), e = numeric(0), f = numeric(0)))))
Unit: seconds