R 模拟一个单面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍
我需要做这个作业。我只是不知道它是怎么工作的。问题是 修改讲座中的函数roll(),使其模拟单个n面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍。您可能会发现有用的函数有?、c()、min()、max()、length()、sort()和rep() 然后函数就开始了R 模拟一个单面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍,r,sample,dice,R,Sample,Dice,我需要做这个作业。我只是不知道它是怎么工作的。问题是 修改讲座中的函数roll(),使其模拟单个n面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍。您可能会发现有用的函数有?、c()、min()、max()、length()、sort()和rep() 然后函数就开始了 roll <- function( num = 1:6, rolls = 1) { dice <- sample(num, size = rolls, replace = TRUE) return
roll <- function( num = 1:6, rolls = 1) {
dice <- sample(num, size = rolls, replace = TRUE)
return(dice)
}
roll您是对的,prob
-参数在这里很有用(即使您可以不使用)
以下是您必须完成的步骤:
- 找出
num
中哪个条目最大(不要假设它是最后一个)
- 您需要该条目的索引(“位置”)
- 计算每个条目(最大条目除外)的概率。示例:如果n=6,则每个prob为1/7,但最后一个prob为2/7
- 在正确的位置生成一个包含这些概率的向量。你已经知道最大的位置,所以你会把双倍的概率放在那个位置
- 将问题交给样本
()
- 测试!运行多次以了解最大值是否真的是两倍
您可以在不使用prob
参数的情况下,通过考虑哪种类型的合理加权(所有面概率相等)模具将给出您想要的结果来完成此操作
sample(1:6,1)
为您提供一个来自无偏六面模具的单个样本。在这个例子中,您似乎想要的是一个有两个6的七面骰子。那将是
样本(c(1:6,6),1)
这是1到5的相等变化,是6的两倍
> table(sample(c(1:6,6),7000,replace=TRUE))
1 2 3 4 5 6
972 1018 1016 980 1018 1996
我不清楚“最高数字出现的频率是所有其他方面的两倍”是否意味着“所有其他方面加在一起”。在这种情况下,您希望从10面模具中取样,1到5加5个六:
样本(c(1:5,rep(6,5)),1)
这是获得1比5或6的同等机会
> table(sample(c(1:5, rep(6,5)),10000,replace=TRUE))
1 2 3 4 5 6
1012 961 943 1018 1026 5040
推广到N并写出你的函数 你看过函数?min
,?max
,?length
,等等吗?甚至是?sample
?是的,我确实检查过,但我很难理解。我做了几次,但每次都失败了hist(样本(1:6,大小=100000,替换=TRUE,prob=c(rep(1,5),2)),xlab=“”,main=“”)
好的,谢谢你,我会尝试用这个来回答任务中的问题。如@NBATrends的提示所示,不要求prob
参数中的值总和为1.0。你可以给它传递一个权重向量,得到相同的结果(因此c(rep(1,5),2)
或c(1,1,1,1,1,1,2)
在上面的注释中)好的,我想我得到了,但是我如何才能得到包含概率的向量呢?“对不起,我是初学者。”本杰明说得对。但请写一条注释,向下一个阅读您的代码的程序员解释这一点。@ernsthaf没问题。示例:vect