gpt4 book ai didi

r - 在 while 语句中设置变量

转载 作者:行者123 更新时间:2023-12-04 08:43:50 25 4
gpt4 key购买 nike

R 是否允许在 while 语句中定义变量?我有一个 while 循环,只要两个条件之一为真,它就应该继续。但是,我还需要 while 循环中两个条件的结果。计算条件的函数在计算上是昂贵的,因此简单地重新计算它们不是一种选择。

while (a = conditionA() || b = conditionB())
{
do_some_work(a)
some_more_work(a, b)
}
我目前的工作如下。
a = conditionA()
b = conditionB()

while (a || b)
{
do_some_work(a)
some_more_work(a, b)

a = conditionA()
b = conditionB()
}
但是,你们都明白,这个解决方案只是感觉不对。其中,它会污染 while 循环之外的范围,并且不希望添加不必要的代码行。
或者,我们可以使用 repeat如评论中提到的帖子所述。尽管这避免了污染循环外的范围,但 IMO 的可读性不如在 while 语句中定义变量。
repeat
{
a = conditionA()
b = conditionB()

if (!a && !b)
break

do_some_work(a)
some_more_work(a, b)
}

最佳答案

您可以使用 <-条件内:

conditionA <- function() sample(c(T,F), 1)
conditionB <- function() sample(c(T,F), 1)

do_some_work <- function(a) cat("a", a, fill = TRUE)
do_some_more_work <- function(a, b) cat("a", a, "b", b, fill = TRUE)

set.seed(1)
while((a <- conditionA()) | (b <- conditionB())){

do_some_work(a)
do_some_more_work(a,b)

}
#> a TRUE
#> a TRUE b FALSE
#> a TRUE
#> a TRUE b TRUE
#> a FALSE
#> a FALSE b TRUE
#> a TRUE
#> a TRUE b TRUE

# The loop ends when both a and b are FALSE
a
#> [1] FALSE
b
#> [1] FALSE
创建于 2020-10-19 由 reprex package (v0.3.0)
如果您使用 || 则不起作用.
如果你真的想用 || ,您需要写下您的 while这样声明:
while({a <- conditionA(); b <- conditionB(); a || b}){

# ...

}

关于r - 在 while 语句中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64430968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com