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
少しでも、あなたの解析が楽になりますように!!