1

n人でいっぱいの部屋で2人以上の学生が同じ誕生日である確率をシミュレートしようとしています. 現在、コードは適切に機能していると思いますが、最初にコードの最初の行を実行して n 値を選択し、残りのコードを個別に実行する必要があります (以下を参照)。

n = as.integer(readline(prompt = "Enter the number of students in a room:"))

sims = 10000
x = numeric(sims)

for (i in 1:sims){
s = sample(1:365, n, replace=TRUE)
x[i] = n - length(unique(s))}

samebday = length(which(x>0))/length(x)
samebday

n変数が関数内に含まれるようにするにはどうすればよいでしょうか? これを次のように関数に変換しようとするとすぐに:

bday.prob = function(n){...}

その後、エラーが発生し始めます。

4

2 に答える 2

1

前に書いたコードを使用して単純に関数にラップしたい場合は、 @42- が言及したように、ユーザー定義の入力変数を使用することで実行できnますsims

以下は、あなたが提供したものからの変更を最小限に抑えた私のソリューションです。

bday.prob = function(n, sims){
  #' @param n is the number of students in a room; user-defined
  #' @param sims is the number of trials; user-defined

  x = numeric(sims)
  for (i in 1:sims){
    s = sample(1:365, n, replace=TRUE)
    x[i] = n - length(unique(s))
  }
  samebday = length(which(x > 0))/length(x)
  return(samebday)
}

関数は次のように使用します。

bday.prob(n=<User choice>, sims=<User choice>)

また

bday.prob(n=as.numeric(readline(prompt = "Enter the number of students in a room:")), sims=100)
## Enter the number of students in a room: <User choice>
于 2017-02-25T17:19:02.580 に答える