Help us understand the problem. What is going on with this article?

Rでサイコロシミュレーションしてみた

まえがき

Rの勉強を始めたのでアウトプットとしてQiitaに投稿していきます。
初心者の域を出ておりませんのであしからず。

※R version 3.6.2 / RStudio Version 1.2.5033

サイコロシミュレーション

dice.r
dice_function <- function(n){
  dice <- as.integer(runif(n, 1, 7))
  dice.table <- table(dice)
  print(dice.table)
  print(prop.table(dice.table))
  hist(dice,
       breaks=c(0, 1, 2, 3, 4, 5, 6),
       probability=T,
       main="Histogram of 1-6",
       xlab="dice",
       col="gray")
}

メモ

  • runifで一様乱数を発生させるn回、1〜7までの値
  • as.integerで整数値にコンバートしている
  • 関数内でprint文を仕込まないとデバッグできない
  • tableで度数を集計してくれる
  • prop.tableで相対度数にしてくれる
  • hist(plot系共通)にmain, xlab, ylabでラベルを付与できる
  • probability=Tで相対度数で描画できる
  • breaksで幅を指定できる/bins指定だといい感じにやってくれる?
  • c(a, b, c,・・・)はベクトル

コード修正版

※コメント頂きましたので追記します(2020.02.19)
上記コードは教訓として残します
実行結果は修正版に差し替えました

dice.r
dice_function2 <- function(n){
  dice <- sample(6, n, replace=TRUE)
  dice.table <- table(dice)
  print(dice.table)
  print(prop.table(dice.table))
  barplot(prop.table(dice.table),
          main="Barplot of 1-6",
          xlab="dice",
          ylab="probability",
          col="gray")
}

メモ

※コメント引用
- 乱数は,1〜6の整数値を取るので,sample() で求める
- 整数乱数なので,hist() ではなく barplot() で描画する

実行結果

※コード修正版に差し替えました

dice_function2(100)

dice
 1  2  3  4  5  6 
22 20 14  9 15 20 
dice
   1    2    3    4    5    6 
0.22 0.20 0.14 0.09 0.15 0.20 

dice2_100.png

dice_function2(1000)

dice
  1   2   3   4   5   6 
177 169 155 159 162 178 
dice
    1     2     3     4     5     6 
0.177 0.169 0.155 0.159 0.162 0.178 

dice2_1000.png

dice_function2(10000)

dice
   1    2    3    4    5    6 
1703 1687 1594 1669 1649 1698 
dice
     1      2      3      4      5      6 
0.1703 0.1687 0.1594 0.1669 0.1649 0.1698 

dice2_10000.png

dice_function2(100000)

dice
    1     2     3     4     5     6 
16762 16645 16593 16580 16656 16764 
d
ice
      1       2       3       4       5       6 
0.16762 0.16645 0.16593 0.16580 0.16656 0.16764 

dice2_100000.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした