R で入れ子になった for ループを作成する方法 (例を含む)


ネストされた for ループを使用すると、複数のベクトル (または行列の複数の次元) の要素を反復処理し、特定の操作を実行できます。

R のfor ループの基本構造は次のとおりです。

 for (i in 1:4) {
  print (i)
}

[1] 1
[1] 2
[1] 3
[1] 4

ネストされた for ループの基本構造は次のとおりです。

 for (i in 1:4) {
  for (j in 1:2) {
    print (i*j)
  }
}

[1] 1
[1] 2
[1] 2
[1] 4
[1] 3
[1] 6
[1] 4
[1] 8

このチュートリアルでは、R でネストされた for ループを作成する例をいくつか示します。

例 1: R の入れ子になった For ループ

次のコードは、ネストされた for ループを使用して 4×4 行列の値を埋める方法を示しています。

 #create matrix
empty_mat <- matrix(nrow= 4 , ncol= 4 )

#view empty matrix
empty_mat
     [,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA

#use nested for loop to fill in values of matrix
for (i in 1:4) {
  for (j in 1:4) {
    empty_mat[i, j] = (i*j)
  }
}

#view matrix
empty_mat

     [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 2 4 6 8
[3,] 3 6 9 12
[4,] 4 8 12 16

例 2: R の入れ子になった For ループ

次のコードは、ネストされた for ループを使用してデータ フレーム内の各値を 2 乗する方法を示しています。

 #create empty data frame
df <- data.frame(var1=c(1, 7, 4),
                 var2=c(9, 13, 15))

#view empty data frame
df

  var1 var2
1 1 9
2 7 13
3 4 15

#use nested for loop to square each value in the data frame
for (i in 1:nrow(df)) {
  for (j in 1:ncol(df)) {
    df[i, j] = df[i, j]^2
  }
}

#view new data frame
df

  var1 var2
1 1 81
2 49 169
3 16 225

ループする場合の注意点

一般に、入れ子になった for ループは小さなデータ セットや行列ではうまく機能しますが、データが大きい場合は非常に遅くなる傾向があります。

ビッグ データの場合、 アプリケーション ファミリの関数はより高速になる傾向があり、 data.tableパッケージには、より大きなデータ セットで効率的に動作する多くの組み込み関数が含まれています。

追加リソース

R で列名を反復処理する方法
R でデータ フレームに行を追加する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です