Rで解析:繰り返し処理に便利な「foreach」パッケージ

Rの解析に役に立つ記事

繰り返し処理にはforやapplyコマンドが便利ですが、痒いところに手が届かないことがあります。そんな、痒いところに手が届くかもしれないパッケージの紹介です。

パッケージのバージョンは1.5.2。実行コマンドはR version 4.2.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("foreach")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("foreach")

#指定回数繰り返す:foreachコマンド
foreach(i = 1:3) %do% rnorm(4)
[[1]]
[1] -1.2070657  0.2774292  1.0844412 -2.3456977

[[2]]
[1]  0.4291247  0.5060559 -0.5747400 -0.5466319

[[3]]
[1] -0.5644520 -0.8900378 -0.4771927 -0.9983864

#結果出力の設定:.combineオプション
#"c"を設定
foreach(i = 1:3, .combine = "c") %do% rnorm(4)
[1]  0.20610310 -0.98109899  0.02649167  1.59199127 -0.18092395 -0.06898068
[7] -0.41337942  1.16898955 -0.07810419 -0.84305630  0.29913439  2.08036405

#"cbind"を設定
foreach(i = 1:3, .combine = "cbind") %do% rnorm(4)
       result.1   result.2   result.3
[1,] -0.7236902 -0.5324504  1.3881262
[2,]  0.7675323 -0.8125667  0.4483272
[3,] -0.6613460  0.2139257 -0.5543930
[4,]  0.4193643  0.6085379 -1.9703620

#"rbind"を設定
foreach(i = 1:3, .combine = "rbind") %do% rnorm(4)
          [,1]      [,2]         [,3]       [,4]
result.1 -0.007604756 1.7770844 -1.138607737  1.3678272
result.2  1.329564791 0.3364728  0.006892838 -0.4554687
result.3 -0.366523933 0.6482866  2.070270861 -0.1533984

#"+"を設定;結果を合計
foreach(i = 1:3, .combine = "+") %do% sum(i + 4)
[1] 18

#"*"を設定;結果を乗算
foreach(i = 1:3, .combine = "*") %do% sum(i + 4)
[1] 210

#こんな配列も作成できます
foreach(a = 11:14, .combine = "cbind") %:%
  foreach(b = 21:24, .combine = "c") %do%
  {
    sum(a, b)
  }
     result.1 result.2 result.3 result.4
[1,]       32       33       34       35
[2,]       33       34       35       36
[3,]       34       35       36       37
[4,]       35       36       37       38

#途中にwhenコマンドを使用
#aが偶数のときのみbの値をaに加算
foreach(a = 11:14, .combine = "cbind") %:%
  foreach(b = 21:24, .combine = "c") %:%
  when(0 == a%%2) %do%
  {
    sum(a, b)
  }
     result.2 result.4
[1,]       33       35
[2,]       34       36
[3,]       35       37
[4,]       36       38

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

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