data.frameやmatrix、ベクトルに対してある処理を繰り返すのに便利なapply関数ファミリがあります。apply関数ファミリに処理経過を示すプログレスバーが付いたコマンドが収録されたパッケージの紹介です。
大規模データを処理するときに便利なパッケージかと思います。なお、apply関数ファミリは内部的にforコマンドで処理しています。処理時間が必ずしも短くできるとは限りませんが、冗長なコードを防ぐ一つの解決策だと思います。
パッケージバージョンは1.7-0。実行コマンドはR version 4.2.2で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("pbapply")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("pbapply")
#プログレスバー付きのapply:pbapplyコマンド
#apply同様にdata.frameやmatrixなどが処理対象
###データ例の作成#####
n <- 5000000
TestData <- data.frame(Data1 = sample(1:20, n, replace = TRUE),
Data2 = sample(1:100, n, replace = TRUE),
Data3 = sample(1:200, n, replace = TRUE),
Data4 = sample(1:300, n, replace = TRUE))
########
#列、行の処理方向を指定:1;列,2;行
system.time(print(pbapply(TestData, MARGIN = 2, quantile)))
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
Data1 Data2 Data3 Data4
0% 1 1 1 1
25% 6 26 50 75
50% 11 50 100 150
75% 15 76 151 225
100% 20 100 200 300
#処理時間
ユーザ システム 経過
0.876 0.072 0.948
#プログレスバー付きのlapply,sapply:pblapply,pbsapplyコマンド
#lapply,sapply,replicate同様にlistなどが処理対象
###データ例の作成#####
n <- 50
TestList <- NULL
for(i in seq(n)){
data <- rnorm(n)
TestList <- c(TestList, list(data))
}
########
#pblapplyコマンド:lapply同様リストで結果を返す
system.time(print(pblapply(TestList, quantile)))
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
[[1]]
0% 25% 50% 75% 100%
-2.3417293 -0.8918863 -0.2130507 0.6858560 2.0818722
##省略##
[[50]]
0% 25% 50% 75% 100%
-2.1019710 -1.0122516 -0.1708603 0.5768743 2.5233048
#処理時間
ユーザ システム 経過
0.024 0.001 0.025
#pbsapplyコマンド:sapply同様ベクトルまたは配列で結果を返す
system.time(print(pbsapply(TestList, quantile)))
[,1] ##省略 [,50]
0% -2.3417293 -2.1019710
25% -0.8918863 -1.0122516
50% -0.2130507 -0.1708603
75% 0.6858560 0.5768743
100% 2.0818722 2.5233048
#処理時間
ユーザ システム 経過
0.022 0.002 0.026
少しでも、あなたの解析が楽になりますように!!