【发布时间】:2021-08-02 21:38:05
【问题描述】:
我有这个while循环:
while (abs(B-left)<INFSMALL | abs(B-right)<INFSMALL) {
...
}
我希望它在上述条件为 FALSE 时运行。有没有简单的方法可以做到这一点?
【问题讨论】:
标签: r while-loop boolean conditional-statements
我有这个while循环:
while (abs(B-left)<INFSMALL | abs(B-right)<INFSMALL) {
...
}
我希望它在上述条件为 FALSE 时运行。有没有简单的方法可以做到这一点?
【问题讨论】:
标签: r while-loop boolean conditional-statements
使用以下之一:
通过用!(.) 包裹整个条件来否定整个条件,如
while (!(abs(B-left) < INFSMALL || abs(B-right) < INFSMALL)) {
...
}
将里面的组件取反,从OR变为AND:
while (abs(B-left) >= INFSMALL && abs(B-right) >= INFSMALL) {
...
}
您应该使用|| 而不是|,请参阅Boolean operators && and ||。流控制函数if 和while 需要条件恰好是长度为1,而不是0,不超过1。而| 将产生一个长度为1 的向量,如果所有参数的长度都是1,这仍然是一个坏主意有两个原因:
短路:一般来说,如果第一个(多个链接的)条件表明第二个(及以后的)条件无关紧要,那么短路意味着它不会评估它们.比如不预定义aa,比较
exists("aa") && aa > 0
# [1] FALSE
exists("aa") & aa > 0
# Error: object 'aa' not found
声明性代码:控制流 while 必须只取长度为 1,确保您知道其中的内容。这可能有点风格,所以上面的 #1 .
【讨论】: