R 循环不工作时出现两种情况

R 循环不工作时出现两种情况,r,R,我正在试验掷骰子的模拟。模拟的目的是生成六个值的向量,每个值的元素是三个六边骰子的总和。我尝试使用while循环来反映两种情况:向量的和应该大于提供的值,最大元素值应该大于阈值 我试过使用&和&,改变参数的顺序,等等。。。但是在每次迭代中,代码只执行一个条件,即总数大于提供的值 我已经通读了,但没用 守则: random.stats=function(threshold,roll){ require(random) temp=rep(0,6) j=0 while(sum(temp

我正在试验掷骰子的模拟。模拟的目的是生成六个值的向量,每个值的元素是三个六边骰子的总和。我尝试使用while循环来反映两种情况:向量的和应该大于提供的值,最大元素值应该大于阈值

我试过使用
&
&
,改变参数的顺序,等等。。。但是在每次迭代中,代码只执行一个条件,即总数大于提供的值

我已经通读了,但没用

守则:

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
@GSee
j
在结果中返回,因此您知道我在使用R版本3.1.0 FWIW时循环了多少次,所以您是说您从这个函数中得到了一个结果,其中
sum(rolls)我希望while循环在两个条件都为真时停止。提供的值可以是任何值,但使用18表示
max(rolls)
是最容易发现故障的情况。我只得到
sum(rolls)>=70
来返回
TRUE
。我希望
是必需的。对于这种情况,迭代次数大约为20-30次。在没有
max(rolls)的情况下,也很可能有
total>70
==18
@GSee
j
在结果中返回,因此您知道使用
的循环次数确实有效,但我不明白为什么。只要参数
为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 )