R の replicate() 関数

Manav Narula 2021年2月25日
R の replicate() 関数

関数 replicate() は式を特定の回数繰り返すことができるので、シミュレーションの作成に利用することができます。また、simplify パラメータを用いて、最終結果の型を配列やリストとして制御することもできます。

関数 replicate() の簡単な例を以下に示します。

replicate(5,1)
[1] 1 1 1 1 1

上の例で見たように、1 は 5 回繰り返される式です。上の例のように、1 は式を 5 回繰り返したものです。この関数に simplify パラメータを追加して (デフォルトでは True です)、それを False に設定すると、配列ではなくリストが得られます。例えば、以下のようになります。

typeof(replicate(5,1,simplify = FALSE))
[1] "list"

2 次元配列を作成するようなより複雑なシミュレーションには replicate() を使用することもできます。以下のコードスニペットにその方法を示します。

replicate(5, seq(1,10,1))
      [,1] [,2] [,3] [,4] [,5]
 [1,]    1    1    1    1    1
 [2,]    2    2    2    2    2
 [3,]    3    3    3    3    3
 [4,]    4    4    4    4    4
 [5,]    5    5    5    5    5
 [6,]    6    6    6    6    6
 [7,]    7    7    7    7    7
 [8,]    8    8    8    8    8
 [9,]    9    9    9    9    9
[10,]   10   10   10   10   10

この例では、単純なシーケンスを作成するために seq() 関数を用いています。replicate() は、このシーケンスを 5 回繰り返し、2 次元配列を生成します。

このような場合には、for() ループを用いることもできます。例えば、以下のようになります。

n <- numeric(5)
arr2d <- replicate(5, {
   for(i in 1:5){n[i] <- print(i)};n} )
print(arr2d)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3
[4,]    4    4    4    4    4
[5,]    5    5    5    5    5

中括弧の外の文として数値ベクトルを使わなければならないことに注意してください。そうしないと、replicate() 関数は for() ループを使っているので、値はゴミとして捨てられて保存されず、NULL 値を取得してしまいます。

arr2d <- replicate(5, {
   for(i in 1:5){print(i)}} )
print(arr2d)

出力:

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - R Function