我想创建一个函数,该函数本身使用很棒的glue::glue
函数。
但是,当我想要粘合存在于函数和全局环境中的变量时,我发现自己正在处理一些名称空间问题:
x=1
my_glue <- function(x, ...) {
glue::glue(x, ...)
}
my_glue("foobar x={x}") #not the expected output
# foobar x=foobar x={x}
我宁愿保留名为x
的变量以保持软件包的一致性。
我最终做了这样的事情,到目前为止效果很好,但只是推迟了问题(很多,但仍然如此):
my_glue2 <- function(x, ...) {
x___=x; rm(x)
glue::glue(x___, ...)
}
my_glue2("foobar x={x}") #problem is gone!
# foobar x=1
my_glue2("foobar x={x___}") #very unlikely but still...
# foobar x=foobar x={x___}
是否有更好/更清洁的方法?
答案 0 :(得分:2)
由于值x = 1
没有传递给函数,因此在当前情况下,一种方法是在全局环境中求值x
之前的字符串传递给函数。
my_glue(glue::glue("foobar x={x}"))
#foobar x=1
my_glue(glue::glue("foobar x={x}"), " More text")
#foobar x=1 More text
另一个选择(我认为这是您正在寻找的答案)是从父环境中获取x
的值。 glue
具有.envir
参数,可以在其中定义用于评估表达式的环境。
my_glue <- function(x, ...) {
glue::glue(x, ...,.envir = parent.frame())
}
my_glue("foobar x={x}")
#foobar x=1