Rで解析:プログレスバー付きのapply関数ファミリ!「pbapply」パッケージ

Rの解析に役に立つ記事

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

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました