gpt4 book ai didi

r - 在参数默认值中使用 If 语句

转载 作者:行者123 更新时间:2023-12-05 07:08:01 27 4
gpt4 key购买 nike

我想知道在参数的默认值中使用 if 语句是否合法。

例如:

foo <- function(x, description=if(x>0) "pos" else "non-pos") {
cat(x, description, "\n")
}

该函数成功运行并执行您期望的操作:

> foo(1)
1 pos
> foo(-1)
-1 non-pos

但是,在交互式调试时,我在尝试多次访问 description 参数时收到'promise already under evaluation' 错误:

> debug(foo)
> foo(1)
debugging in: foo(1)
debug at #1: {
cat(x, description, "\n")
}
Browse[2]> description
debug at #1: [1] "pos"
Browse[3]> description
Error: promise already under evaluation: recursive default argument reference or earlier problems?

谢谢

最佳答案

注意提示:第一次是Browse[2],第二次是Browse[3]。发生的事情是您单步执行设置 description 默认值的表达式,即 if(x>0) "pos"else "non-pos" 和还没回来打印时

debug at #1: [1] "pos"

它不是打印 description 的值,而是打印即将执行的语句。

如果您按回车键(或 n 转到下一个语句),您将得到Browse[2] 再次提示,一切正常:

> foo(1)
debugging in: foo(1)
debug at #1: {
cat(x, description, "\n")
}
Browse[2]> description
debug at #1: [1] "pos"
Browse[3]>
[1] "pos"
Browse[2]> description
[1] "pos"
Browse[2]>

将您的功能更改为

foo <- function(x, description={if(x>0) v <- "pos" else v <-"non-pos"; v}) {
cat(x, description, "\n")
}

将使步骤更加清晰。

关于r - 在参数默认值中使用 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61971773/

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