R 循环不工作时出现两种情况
我正在试验掷骰子的模拟。模拟的目的是生成六个值的向量,每个值的元素是三个六边骰子的总和。我尝试使用while循环来反映两种情况:向量的和应该大于提供的值,最大元素值应该大于阈值 我试过使用R 循环不工作时出现两种情况,r,R,我正在试验掷骰子的模拟。模拟的目的是生成六个值的向量,每个值的元素是三个六边骰子的总和。我尝试使用while循环来反映两种情况:向量的和应该大于提供的值,最大元素值应该大于阈值 我试过使用&和&,改变参数的顺序,等等。。。但是在每次迭代中,代码只执行一个条件,即总数大于提供的值 我已经通读了,但没用 守则: random.stats=function(threshold,roll){ require(random) temp=rep(0,6) j=0 while(sum(temp
&
和&
,改变参数的顺序,等等。。。但是在每次迭代中,代码只执行一个条件,即总数大于提供的值
我已经通读了,但没用
守则:
random.stats=function(threshold,roll){
require(random)
temp=rep(0,6)
j=0
while(sum(temp)<threshold && max(temp)<roll){
for(i in 1:6){
temp[i]=sum(sort(randomNumbers(n=5,min=1,max=6,col=1),
decreasing=TRUE)[1:3])
}
j=j+1
}
return(list(rolls=temp,total=sum(temp),required.iterations=j))
}
random.stats=函数(阈值,滚动){
要求(随机)
温度=代表(0,6)
j=0
虽然(和(TEMP)您在while循环中有错误的条件。
roll = c(14, 17, 14, 10, 15, 14)
sum(roll) = 84
max(roll) = 17
<>你现在只运行,如果两者<代码>和> p>你在while循环中有错误的条件。考虑案例
roll = c(14, 17, 14, 10, 15, 14)
sum(roll) = 84
max(roll) = 17
现在只有当两个sumI都在使用R版本3.1.0 fwiw时,您的while才会运行。因此,您的意思是,您已经从这个函数中得到了一个结果,其中sum(rolls)我希望while循环在两个条件都为真时停止。提供的值可以是任何值,但max(rolls)使用18
是最容易发现故障的情况。我只得到sum(rolls)>=70
来返回TRUE
。我希望是必需的。对于这种情况,迭代次数大约为20-30次。在没有max(rolls)的情况下,也很可能有total>70
==18
@GSeej
在结果中返回,因此您知道我在使用R版本3.1.0 FWIW时循环了多少次,所以您是说您从这个函数中得到了一个结果,其中sum(rolls)我希望while循环在两个条件都为真时停止。提供的值可以是任何值,但使用18表示max(rolls)
是最容易发现故障的情况。我只得到sum(rolls)>=70
来返回TRUE
。我希望是必需的。对于这种情况,迭代次数大约为20-30次。在没有max(rolls)的情况下,也很可能有total>70
==18
@GSeej
在结果中返回,因此您知道使用
的循环次数确实有效,但我不明白为什么。只要参数为TRUE
,while循环就会继续。我希望我在OP中使用
而不是使用&
或时得到的行为&&
。在我看来,流控制似乎是向后的。@scs217需要一些时间来写出真值表,就像我上面所做的那样。记住而只有在检查返回真值时才会运行,和要求两个元素都是真值我明白你的意思。我不知道我可以让终端计算那些逻辑运算直到现在,我才直接输入ERATOR。知道我可以直接输入>TRUE | FALSE
等,这将允许我排除可能遇到的大多数其他逻辑求值差异。再次感谢!+1 MrFlick@scs217,另一种更直观的思考方法是在值不是您希望的值时循环:while(!(总和(温度)>阈值和最大值(温度)>滚动))。这在逻辑上等同于Flick先生建议的OR。请查看+1处的De Morgan定律。正如您所知,您可以在R基中实现这一点:random.stats使用
肯定有效,但我不明白为什么。只要参数为TRUE
,while循环就会继续。我期望得到的行为在OP中使用
而不是使用&
或&
进行编辑。在我看来,流控制似乎是向后的。@scs217需要一些时间像我上面所做的那样写出真值表。请记住而只有在检查返回真值时才会运行,并且&
要求这两个元素都是真值你的观点。我刚才还不知道我可以让终端直接计算那些逻辑运算符。知道我可以直接输入>TRUE | FALSE
等,这将允许我排除可能遇到的大多数其他逻辑计算差异。再次感谢!+1 MrFlick.@scs217,考虑这一点的另一种方法可能是m更直观的方法是在值不是您希望的值时循环:while(!(sum(temp)>threshold&max(temp)>roll))。这在逻辑上等同于MrFlick建议的OR。查看+1处的De Morgan定律。正如您所知,您可以在base R:random.stats中完成此操作
while ( sum(temp)<threshold | max(temp)<roll )