因此,我正在学习一门需要学习R的课程,而我正在努力解决其中一个问题:
在这个问题中,您将练习从另一个函数中调用一个函数。我们将通过模拟骰子投掷估计滚动两个六的概率。 (小数点后四位的正确概率为0.0278
,或36为1)。
(1)创建一个函数roll.dice()
,它接受一个数字ndice并返回掷骰子数量的结果。这些是六面骰子,可以返回1到6之间的数字。例如,roll.dice(ndice=2)
可能会返回4 6
。使用sample()
功能,注意替换选项。
(2)现在创建一个带参数nsamples的函数prob.sixes()
,首先将j设置为0,然后多次调用roll.dice()
(nsample次)。每次roll.dice()
返回两个六,请将一个添加到j。然后返回投掷两个六的概率,即j除以nsamples。
我对第一部分很好,或者至少我是这么认为的,所以这就是我所拥有的
roll.dice<-function(ndice)
{
roll<-sample(1:6,ndice,TRUE)
return(roll)
}
roll.dice(ndice=2)
但我正在努力解决第二部分问题。这就是我到目前为止所做的:
prob.sixes<-function(nsamples) {
j<-vector
j<-0
roll.dice(nsamples)
if (roll.dice==6) {
j<-j+1
return(j)
}
}
prob.sixes(nsamples=3)
对不起所有文字,但有人可以帮助我吗?
答案 0 :(得分:2)
您的代码有几个我可以看到的问题。第一个是对问题的解释。问题是:
现在创建一个带参数nsamples的函数prob.sixes(),它首先将j设置为0,然后多次调用roll.dice()(nsample次数)。
检查你的代码,你在做这个吗?或者你一次调用roll.dice()?寻找方法来做同样的事情(在你的情况下,roll.dice)几次;你可以考虑函数for
。此外,在这里,您需要将此函数的结果存储在变量上,例如
rolled = roll.dice(2)
第二个问题:
每次roll.dice()返回两个sixes时,将一个添加到j。
您正在检查是否roll.dice==6
。但这有两个问题。首先,roll.dice
是功能,而不是变量。所以它永远不会等于6.此外,你不想检查这个变量是否等于6。你应该问这个变量是否等于一对六。你怎么写&#34;一对六&#34;?