R のループのネスト
胡金庫
2023年1月30日
この記事では、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
関数で計算されることを除いて、一般的な表記法は前の例と同じであることに注意してください。nrow
と ncol
は、それぞれ配列の行数または列数を返します。
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
著者: 胡金庫