Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 模拟一个单面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍_R_Sample_Dice - Fatal编程技术网

R 模拟一个单面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍

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(),使其模拟单个n面模具,其中数量最多的一面显示的频率是所有其他面显示频率的两倍。您可能会发现有用的函数有?、c()、min()、max()、length()、sort()和rep()

然后函数就开始了

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