无法理解 r 中 tidyeavl 中的 Curly Curly

can not understand Curly Curly in tidyeavl in r

我用{{}}在r中建立了一个自函数

我不明白为什么会这样。

test.data = data.frame(pm10 = 1:5)
test.data

new.col.name = 'lag_pm10'
col = 'pm10'

test.data %>% # error
  mutate({{new.col.name}} := lag({{col}}, 2))

test.data %>% # works
  mutate({{new.col.name}} := lag(get(col), 2))

在我看来,当我将 new.col.namecol 放入 {{}} 时,它们会被解析。

但情况是 {{new.col.name}} 工作正常并且 {{col}} 没有 return 我预期的那样。

然后我把 {{col}} 改成 get(col) 就可以了。

我不知道为什么。

在我看来,这两个对象(new.col.namecol)的值都是字符。

我用{{}}new.col.namecol应该是一样的。

我想也许 {{new.col.name}} 成为变量名而 {{col}} 成为 mutate() 中的参数。

如果是这样的话。 我可以说我可以对任何变量名称使用 {{}} 对所有参数使用 get() 吗?

您可以将其编写为传递未加引号的变量的函数,而不是使用 curly-curly {{ 运算符的字符串,如下所示:

my_function <- function(test.data, new.col.name, col) {
  test.data %>% # error
    mutate({{new.col.name}} := lag({{col}}, 2))
}

my_function(test.data, lag_pm10, pm10)

输出:

  pm10 lag_pm10
1    1       NA
2    2       NA
3    3        1
4    4        2
5    5        3