ランダムなベクトルなどを生成します。
1から5までの整数からランダムに並べた数値ベクトルを生成してください。
## [1] 2 1 4 3 5
sample(1:5)
## [1] 4 1 2 3 5
一定の範囲(ベクトル)からランダムにサンプリングするには、sample
関数が便利です。第一引数(x=
)に数値範囲(ベクトル)を指定すると、そこからランダムに1つずつ取り出します。
なお、ベクトルではなく一つの値(6や3.8など)を指定すると、その値を超えない値で1から順番に整数を並べたベクトルを返します:
sample(6)
## [1] 1 6 3 5 2 4
sample(9.5)
## [1] 9 7 2 8 5 4 1 6 3
1から100までの整数からランダムに10個取得した数値ベクトルを生成してください。
## [1] 4 8 68 54 13 18 64 10 48 86
sample(1:100, 10)
## [1] 92 71 20 40 60 23 18 94 37 98
あるベクトルからランダムにサンプリングするsample
関数には、第二引数(size=
)でサンプリング数を指定できます。
なおsample
関数はデフォルトでは一度サンプリングした要素は再利用しませんので、この場合出力で同一の値が含まれることはありません。そのため、第一引数(x=
)を超える第二引数を指定(たとえばsample(1:2,4)
など)とするとエラーが返ってきます。
以下のような、1から5までの整数からランダムに20個取得した数値ベクトルを生成してください。
## [1] 5 2 1 3 2 3 4 2 1 3 2 3 1 4 2 3 2 2 2 4
sample(1:5, 20, replace = TRUE)
## [1] 4 1 1 2 5 4 3 3 4 1 5 2 4 5 2 3 5 5 4 4
第一引数(x=
)にもととなる値(orベクトル)を指定し、第2引数でサンプリングする回数を指定します。replace=
引数は「持ってくる値を繰り返し使っていいか?」を指定し、TRUE
なら再利用します。
今回の問題は「1から5の整数」で「20個」とあるので、このようなコードとなります。
1から5までの整数からランダムに50個取得した数値ベクトルを生成してください。ただし、各値の生成確率は1から順に50%,25%,15%,8%,2%としてください。
## [1] 2 4 3 1 1 1 2 1 2 3 2 2 1 2 1 1 2 1 1 4 2 2 1 2 3 2 3 2 1 2 1 2 1 2 1
## [36] 3 2 2 1 1 2 2 1 1 3 3 3 3 3 3
sample(1:5, 50, replace = TRUE, prob = c(0.5, 0.25, 0.15, 0.08, 0.02))
## [1] 1 3 2 3 2 1 3 1 3 1 4 1 1 1 2 1 2 3 2 1 1 2 3 2 3 1 2 2 1 4 1 1 5 2 2
## [36] 1 1 2 1 2 1 1 2 1 4 4 1 1 3 1
あるベクトルから、その発生確率を指定してランダムサンプリングするのもsample
関数でできます。引数prob=
で、各要素の確率を解答例のように与えることで、発生確率を指定することができます。ただし、このように指定するには第一引数(x=
)のベクトル長とprob=
のベクトル長を合わせる必要があります。
項目数が少ないうちはこのように手作業でもいいですが、数が多くなってくるとかなり不便なので、別途データセットなり計算式などで与えるほうがスマートになるでしょう。