Другой вариант - использовать формат файла feather .
df <- as.data.frame(matrix(runif(256*65536), nrow = 256))
system.time(feather::write_feather(df, "df.feather"))
#> user system elapsed
#> 0.237 0.355 0.617
Feather - это формат двоичного файла, который очень эффективен для чтения и записи. Он предназначен для работы с несколькими языками: в настоящее время есть клиенты R и python, и клиент julia работает.
Для сравнения, вот как долго saveRDS
принимает:
system.time(saveRDS(df, "df.rds"))
#> user system elapsed
#> 17.363 0.307 17.856
Теперь это несколько несправедливое сравнение, потому что по умолчанию для saveRDS
используется сжатие данных, и здесь данные несжимаемы, потому что они полностью случайны. Сжатие сжимания делает saveRDS
значительно быстрее:
system.time(saveRDS(df, "df.rds", compress = FALSE))
#> user system elapsed
#> 0.181 0.247 0.473
И действительно, теперь он немного быстрее, чем перо. Так зачем использовать перо? Ну, это обычно быстрее, чем readRDS()
, и вы обычно записываете данные относительно немного раз по сравнению с количеством раз, которое вы читали.
system.time(readRDS("df.rds"))
#> user system elapsed
#> 0.198 0.090 0.287
system.time(feather::read_feather("df.feather"))
#> user system elapsed
#> 0.125 0.060 0.185