gpt4 book ai didi

r - 在不同环境中调用时,部分粘合功能不起作用

转载 作者:行者123 更新时间:2023-12-04 07:24:05 25 4
gpt4 key购买 nike

我已经 partialised glue function在我正在进行的一个项目中,这样我们就可以使用商定的分隔符,而不必一直告诉胶水。但是当我们在另一个函数中使用偏函数时,它停止工作:

library(purrr)
library(glue)

glue_query <- partial(glue, .open = "<<", .close = ">>")

# case 1: use partialised function in same scope
x <- 15
glue_query("There are <<x>> apples here!")
#> There are 15 apples here!

# case 2: use partialised function in different scope
myfunc_partialised <- function(y) {
glue_query("The thing I called y is actually <<y>>")
}
myfunc_partialised(15)
#> Error in eval(parse(text = text, keep.source = FALSE), envir): object 'y' not found

# case 3: use function directly
myfunc_regular <- function(z) {
glue("The thing I called z is actually <<z>>", .open = "<<", .close = ">>")
}
myfunc_regular(15)
#> The thing I called z is actually 15
创建于 2021-07-09 由 reprex package (v2.0.0)
我觉得 glue_query正在寻找要在它定义的环境中插入的对象,而不是在它被调用的环境中。这就是这里发生的事情吗?我可以指导它使用调用环境吗?我想在我的整个包裹中使用它!
编辑:我明白 glue有一个 .envir参数控制表达式在哪个环境中进行计算,但我不太确定使用什么来确保它在这里运行良好!

最佳答案

似乎partial()使获得正确的环境变得更加困难。相反,您可以编写自己的包装器

glue_query <- function(..., .open = "<<", .close = ">>", .envir=parent.frame()) {
glue(..., .open=.open, .close=.close, .envir=.envir)
}
这将适用于您提供的两个测试用例。

关于r - 在不同环境中调用时,部分粘合功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68310354/

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