LoginSignup
2
1

More than 5 years have passed since last update.

R言語でランダムに結果を取得する

Posted at

概要

R言語でランダムな結果を取得するための関数sampleの使い方

解説

以下のR言語のコードでランダムにTRUE、FALSEを1つだけ取得できます。

# 以下の結果は実行するごとに変わります
> x <- c(TRUE, FALSE) # 母集団
> sample(x, size = 1)
[1] TRUE

続けてsample関数を呼ぶとsample関数で出力される結果がランダムに変化しているのがわかります。

# 以下の結果は実行するごとに変わります
> sample(x, size = 1)
[1] TRUE
> sample(x, size = 1)
[1] FALSE
> sample(x, size = 1)
[1] FALSE
> sample(x, size = 1)
[1] FALSE

第1引数として渡す母集団の要素数を3つ以上にすることもできます。

# 以下の結果は実行するごとに変わります
> x <- c("大吉", "中吉", "小吉", "凶", "大凶")
> sample(x, size = 1)
[1] "小吉"
> sample(x, size = 1)
[1] "大吉"
> sample(x, size = 1)
[1] "凶"

sizeを2以上にすることで連続して結果を取得できます。このとき、sample関数の引数としてreplaceをFALSE(デフォルト値)にしている場合は、一度取得した結果は再度取得されません。

# 以下の結果は実行するごとに変わります
> x <- c("大吉", "中吉", "小吉", "凶", "大凶")
> sample(x, size = 2)
[1] "大吉" "大凶" # 2回目の出力では"大吉"は選ばれない
> sample(x, size = 3)
[1] "中吉" "大吉" "大凶"
> sample(x, size = 5)
[1] "凶"   "大凶" "中吉" "大吉" "小吉" # 毎回異なる結果が出力される

# replace = FALSEで母集団の要素数を超えるsizeを指定するとエラー
> sample(x, size = 6)
 sample.int(length(x), size, replace, prob) でエラー: 
   'replace = FALSE' なので母集団以上の大きさの標本は取ることができません

# replaceをTRUEにすると毎回母集団の全ての要素からいずれかの結果を取得する
> sample(x, size = 10, replace = TRUE)
[1] "中吉" "中吉" "小吉" "小吉" "小吉" "小吉" "凶"   "凶"   "小吉" "中吉"

また、sample関数の引数としてprobを指定すると各値が出力される確率を指定できます。

# 以下の結果は実行するごとに変わります
> x <- c("あたり", "はずれ")
# 20%の確率で"あたり"、80%の確率で"はずれ"を出力
> sample(x, size = 5, replace = TRUE, prob = c(0.2, 0.8))
[1] "はずれ" "はずれ" "はずれ" "はずれ" "はずれ"
> sample(x, size = 5, replace = TRUE, prob = c(0.2, 0.8))
[1] "はずれ" "はずれ" "はずれ" "あたり" "あたり"
> sample(x, size = 5, replace = TRUE, prob = c(0.2, 0.8))
[1] "あたり" "はずれ" "はずれ" "はずれ" "はずれ"

# 母集団と指定した確率の個数が一致しない場合はエラー
> sample(x, size = 5, replace = TRUE, prob = c(0.2))
 sample.int(length(x), size, replace, prob) でエラー: 
   確率値の個数が正しくありません 
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1