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))
########

#&#21015;&#12289;&#34892;&#12398;&#20966;&#29702;&#26041;&#21521;&#12434;&#25351;&#23450;:1;&#21015;,2;&#34892;
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
#&#20966;&#29702;&#26178;&#38291;
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
0.876      0.072      0.948

#&#12503;&#12525;&#12464;&#12524;&#12473;&#12496;&#12540;&#20184;&#12365;&#12398;lapply,sapply:pblapply,pbsapply&#12467;&#12510;&#12531;&#12489;
#lapply,sapply,replicate&#21516;&#27096;&#12395;list&#12394;&#12393;&#12364;&#20966;&#29702;&#23550;&#35937;
###&#12487;&#12540;&#12479;&#20363;&#12398;&#20316;&#25104;#####
n <- 50
TestList <- NULL
for(i in seq(n)){
  
  data <- rnorm(n)
  TestList <- c(TestList, list(data))
  
}
########

#pblapply&#12467;&#12510;&#12531;&#12489;:lapply&#21516;&#27096;&#12522;&#12473;&#12488;&#12391;&#32080;&#26524;&#12434;&#36820;&#12377;
system.time(print(pblapply(TestList, quantile)))
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
[[1]]
0%        25%        50%        75%       100% 
-2.3417293 -0.8918863 -0.2130507  0.6858560  2.0818722 
##&#30465;&#30053;##
[[50]]
0%        25%        50%        75%       100% 
-2.1019710 -1.0122516 -0.1708603  0.5768743  2.5233048 
#&#20966;&#29702;&#26178;&#38291;
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
0.024      0.001      0.025 

#pbsapply&#12467;&#12510;&#12531;&#12489;:sapply&#21516;&#27096;&#12505;&#12463;&#12488;&#12523;&#12414;&#12383;&#12399;&#37197;&#21015;&#12391;&#32080;&#26524;&#12434;&#36820;&#12377;
system.time(print(pbsapply(TestList, quantile)))
[,1] ##&#30465;&#30053; [,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
#&#20966;&#29702;&#26178;&#38291;
&#12518;&#12540;&#12470;   &#12471;&#12473;&#12486;&#12512;       &#32076;&#36942;  
0.022      0.002      0.026

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

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