我正在研究Digital Dice by Paul Nahin,以自学Monte Carlo模拟。我在第一遍将书中的Matlab代码转换为R代码,然后在第二遍将for循环替换为整齐的版本。
编辑:这是我要建模的内容:
这是使用for循环的R代码:
m <- 24
total_correct <- 0
n <- 10000
for (i in 1:n) {
correct <- 0
term <- sample(m, replace = TRUE)
for (j in 1:m) {
if (term[j] == j) {
correct <- correct + 1
}
}
total_correct = total_correct + correct
}
total_correct <- total_correct / n
print(total_correct)
这有效(但是我承认给出了错误的答案)。接下来要整理一下-这是我的尝试:
crossing(trials = 1:10,
m = 1:24) %>%
mutate(guess = sample.int(24, n(), replace = F), result = m == guess) %>%
summarise(score = sum(result) / n())
但是,我收到一条错误消息,内容为Error in sample.int(x, size, replace, prob): cannot take a sample larger than the population when 'replace = FALSE'
。
我了解发生了什么:n()
语句中的mutate()
命令返回240。使用replace = FALSE
从总体24进行采样240是没有意义的,因此会出现错误消息。
如何获得mutuate()
语句以在每次迭代(或试用)中获得24的大小?