R通过函数传递缺少的参数
R passing missing arguments through functions
我似乎找不到可以帮助我解决此问题的 SO post。我的最小可重现示例是:
bigfn <- function(x) {
smallfn(x)
}
smallfn <- function(y) {
y <- rlang::enquo(y)
print(y)
print(rlang::quo_is_missing(y))
}
bigfn()
的输出是:
<quosure>
expr: ^x
env: 0x7fc93fc0f8c8
[1] FALSE
但我希望 quosure 是一个空的 quosure 并且 FALSE
是 TRUE
以反映 bigfn
通过 smallfn
向下传播缺失值的事实.
此外,我不想将 enquo
移动到 bigfn
,因为我仍然希望能够独立于 bigfn
使用 smallfn
。
为什么不这样做:
bigfn <- function(x) {
if(missing(x)) smallfn()
else smallfn(x)
}
然后,在不改变 smallfn
的情况下,您有:
bigfn()
#> <quosure>
#> expr: ^
#> env: empty
#> [1] TRUE
bigfn(2)
#> <quosure>
#> expr: ^x
#> env: 00000000119E8FD0
#> [1] FALSE
也许一种称为“转发点”的模式在这里很有用。它保留了缺失的参数并且在非标准评估的上下文中表现良好:
bigfn <- function(...) {
smallfn(...)
}
bigfn()
# <quosure>
# expr: ^
# env: empty
# [1] TRUE
但是,如果您确实需要通过名称引用特定参数,则需要使用 {{
(对于 !!enquo
是 shorthand)将它们“隧道化”到 smallfn()
:
bigfn <- function(x) {
smallfn({{x}})
}
bigfn()
# <quosure>
# expr: ^
# env: empty
# [1] TRUE
bigfn(42)
# <quosure>
# expr: ^42
# env: empty
# [1] FALSE
我似乎找不到可以帮助我解决此问题的 SO post。我的最小可重现示例是:
bigfn <- function(x) {
smallfn(x)
}
smallfn <- function(y) {
y <- rlang::enquo(y)
print(y)
print(rlang::quo_is_missing(y))
}
bigfn()
的输出是:
<quosure>
expr: ^x
env: 0x7fc93fc0f8c8
[1] FALSE
但我希望 quosure 是一个空的 quosure 并且 FALSE
是 TRUE
以反映 bigfn
通过 smallfn
向下传播缺失值的事实.
此外,我不想将 enquo
移动到 bigfn
,因为我仍然希望能够独立于 bigfn
使用 smallfn
。
为什么不这样做:
bigfn <- function(x) {
if(missing(x)) smallfn()
else smallfn(x)
}
然后,在不改变 smallfn
的情况下,您有:
bigfn()
#> <quosure>
#> expr: ^
#> env: empty
#> [1] TRUE
bigfn(2)
#> <quosure>
#> expr: ^x
#> env: 00000000119E8FD0
#> [1] FALSE
也许一种称为“转发点”的模式在这里很有用。它保留了缺失的参数并且在非标准评估的上下文中表现良好:
bigfn <- function(...) {
smallfn(...)
}
bigfn()
# <quosure>
# expr: ^
# env: empty
# [1] TRUE
但是,如果您确实需要通过名称引用特定参数,则需要使用 {{
(对于 !!enquo
是 shorthand)将它们“隧道化”到 smallfn()
:
bigfn <- function(x) {
smallfn({{x}})
}
bigfn()
# <quosure>
# expr: ^
# env: empty
# [1] TRUE
bigfn(42)
# <quosure>
# expr: ^42
# env: empty
# [1] FALSE