R のループのネスト

胡金庫 2023年1月30日
  1. R 言語での for ループ
  2. ネストされた for ループを使用して、R の行列要素を反復処理する
R のループのネスト

この記事では、R のネストされた for ループを紹介します。

R 言語での for ループ

for ループは、ほとんどのプログラミング言語と同様のヒューリスティックを備えた R 言語で使用できます。指定されたコードブロックを複数回繰り返します。for ループの構文は次のとおりです。

for (item in set) {}

item は、set からの反復要素を格納するオブジェクトです。for ループは出力を返さないため、各反復で word 値を出力するために print 関数を呼び出す必要があります。

vec1 <- c("ace", "spades", "king", "spades", "queen", "spades", "jack",
           "spades", "ten", "spades")

for (word in vec1) {
  print(word)
}

出力:

[1] "ace"
[1] "spades"
[1] "king"
[1] "spades"
[1] "queen"
[1] "spades"
[1] "jack"
[1] "spades"
[1] "ten"
[1] "spades"

インデックスが変数として公開される for ループを実装することもできます。この場合、length 関数を使用して vec1 ベクトルのサイズを計算し、最初の要素から最後まで繰り返します。1:表記は重要であり、範囲の開始を指定することに注意してください。次のサンプルコードは、for ループを使用して同じサイズの別のベクトルにコピーされた文字列ベクトルを作成します。

vec1 <- c("ace", "spades", "king", "spades", "queen", "spades", "jack",
           "spades", "ten", "spades")

vec2 <- vector(length = length(vec1))

for (i in 1:length(vec1)) {
  vec2[i] <- vec1[i]
}
vec2

出力:

[1] "ace"    "spades" "king"   "spades" "queen"  "spades" "jack"   "spades" "ten"   
[10] "spades"

ネストされた for ループを使用して、R の行列要素を反復処理する

ネストされたループは、for ループ構造を使用して実装できます。これを利用して、行列要素を反復処理し、ランダムな値で初期化できます。範囲の終わりが nrow および ncol 関数で計算されることを除いて、一般的な表記法は前の例と同じであることに注意してください。nrowncol は、それぞれ配列の行数または列数を返します。

mat1 <- matrix(0, nrow = 5, ncol = 5)
for (i in 1:nrow(mat1)) {
  for (j in 1:ncol(mat1)) {
    mat1[i, j] <- sample(1:100, 1, replace=TRUE)
  }
}
mat1

出力:

[,1] [,2] [,3] [,4] [,5]
[1,]   13   14   13   67   98
[2,]   28   50   23   55    9
[3,]    3   65   99   17   93
[4,]   18    6   20   50   46
[5,]   51   76   33   26    3

ただし、ネストされたループ構造は、前のサンプルコードでは正常に機能します。次のスニペットに示すように、行列の初期化は、matrix 関数の最初の引数として直接チェーンされた sample 関数を使用して行う方が適切です。

mat2 <- matrix(sample(1:100, 25, replace = TRUE), ncol = 5)
mat2

出力:

[,1] [,2] [,3] [,4] [,5]
[1,]   85   19   26   53   88
[2,]   44   50   66   96   56
[3,]   42   46   37   19   66
[4,]   43   23   13   32   67
[5,]   56   51   21    2   56
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - R Loop