ランダムなベクトルなどを生成します。

問題(1) 一定の範囲の整数からランダムに数値ベクトルを生成1

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

問題(2) 一定の範囲の整数からランダムに数値ベクトルを生成2

1から100までの整数からランダムに10個取得した数値ベクトルを生成してください。

出力例

##  [1]  4  8 68 54 13 18 64 10 48 86

解答例1

sample(1:100, 10)
##  [1] 92 71 20 40 60 23 18 94 37 98

あるベクトルからランダムにサンプリングするsample関数には、第二引数(size=)でサンプリング数を指定できます。

なおsample関数はデフォルトでは一度サンプリングした要素は再利用しませんので、この場合出力で同一の値が含まれることはありません。そのため、第一引数(x=)を超える第二引数を指定(たとえばsample(1:2,4)など)とするとエラーが返ってきます。

問題(3) 一定の範囲の整数からランダムに数値ベクトルを生成3

以下のような、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個」とあるので、このようなコードとなります。

問題(4) 一定の範囲の整数から確率をランダムに数値ベクトルを生成4

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=のベクトル長を合わせる必要があります。

項目数が少ないうちはこのように手作業でもいいですが、数が多くなってくるとかなり不便なので、別途データセットなり計算式などで与えるほうがスマートになるでしょう。