データを小さく保存するだけでなく、取り込みも素早いファイル形式で保存が可能なパッケージの紹介です。大変便利だと思います。
なお、実行コマンドを実行する際はデータ例の作成のnを小さくしないと大変時間がかかります。そのまま実行するのはオススメしません。注意してください。
パッケージバージョンは0.9.4。パッケージのバージョンは0.4.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("fst")
実行コマンド
詳細はコマンド、パッケージのヘルプを確認してください。
パッケージの読み込み library("fst") ###データ例の作成##### n <- 5000000 TestData <- data.frame("Group" = sample(paste0("Group", 1:3), n, replace = TRUE), "Data1" = sample(rnorm(10), n, replace = TRUE), "Data2" = sample(LETTERS[1:10], n, replace = TRUE), "Data3" = sample(rnorm(10), n, replace = TRUE)) ######## ###ファイルの保存場所を指定##### library("tcltk") setwd(paste(as.character(tkchooseDirectory(title = "ファイルの保存場所を選択"), sep = "", collapse =""))) ######## ###以下コマンドの説明です##### #fstファイルで保存:write.fstコマンド #圧縮率を設定:compressオプション;0-100の範囲 #write.fst(x = "オブジェクトを指定", "Test.fst", compress = 0) #fstファイルの読込み:write.fstコマンド #対象ファイルの保存場所を指定:pathオプション #結果をdata.table classにする:as.data.tableオプション;初期値:FALSE #read.fst(path = "ファイルパス", columns = NULL, from = 1, to = NULL, # as.data.table = FALSE) ######## ###参考:TestDataオブジェクト,エクセルファイル,fstファイルのサイズ比較##### #TestDataオブジェクトのサイズ print(object.size(TestData), units = "b") 160001816 bytes #エクセルファイルで出力した場合のサイズ #openxlsxパッケージを利用した場合 #install.packages("openxlsx") library("openxlsx") write.xlsx(TestData, file = "Test.xlsx", sheetName = "TestData") #確認;結果はbytes file.size(file.choose()) [1] 81409417 #write.fstコマンドで出力した場合のサイズ #compress = 0の場合 file.info(file.choose())[, 1] [1] 90000284 #compress = 100の場合 #オリジナルの約1/10のサイズ file.info(file.choose(), compress = 100)[, 1] [1] 11827144 ######## ###参考:エクセルファイル,fstファイルの読込み時間比較##### #エクセルファイルでの読込み時間 #openxlsxパッケージを利用した場合 library("tcltk") library("openxlsx") #xlsxファイルファイルを選択 XLPath <- paste0(as.character(tkgetOpenFile(title = "エクセルファイルを選択", filetypes = '{"エクセルファイル" {"*.*"}}', initialfile = c("*.*"))), collapse = " ") #xlsxファイルの読み込み:read.xlsxコマンド #読み込むシートを指定:sheetオプション system.time(XLData <- read.xlsx(XLPath, sheet = 1)) ユーザ システム 経過 77.57 6.74 84.63 #fstファイルの読み込み FSTPath <- paste0(as.character(tkgetOpenFile(title = "fstファイルを選択", filetypes = '{"fstファイル" {"*.*"}}', initialfile = c("*.*"))), collapse = " ") #compress = 0の場合 system.time(FSTData <- read.fst(path = FSTPath, columns = NULL, from = 1, to = NULL, as.data.table = FALSE)) ユーザ システム 経過 0.02 0.02 0.03 #compress = 100の場合 ユーザ システム 経過 0.14 0.00 0.14 #compress = 0の場合で同等性の確認 identical(all.equal(TestData, FSTData), TRUE) [1] TRUE
参考:作業した環境
なお、ディスクドライブはSamsung SSD 750 EVOを使用しています。
あなたの解析がとっても楽になりますように!!