当前在函数内部使用 rlang 和 tidyeval 的方式

问题描述 投票:0回答:1

只是想知道在函数中使用潮汐原则的艺术当前的起点是什么。

假设我们的环境中有两个

tibble
,我们想将他们的名字传递给
purrr::map
调用:

library(tidyverse)

t1 <- tribble(
  ~name,
  "foo"
  )

t2 <- t1

通过引用它们的名称作为字符串来打印

t1
t2
,这是有效的:

ls() %>% 
  map(
    ~get(.x)
    )

但我尝试使用更惯用的潮汐方法并没有成功

ls() %>% 
  map(
    ~{{.x}}
  )

ls() %>% 
  map(
    ~enquo(.x)
  )


ls() %>% 
  map(
    ~sym(.x)
  )

这些都打印对象的名称,而不是它们的内容。

这如何使用 tidyeval 方法工作?

r tidyverse rlang tidyeval
1个回答
0
投票

您需要使用

eval()
来评估符号

ls() %>% 
    map(
        ~eval(sym(.x))
    )

注意这种方式只适用于

sym()
。所以根据你想做什么,你可能必须找到一种方法来评估其他捕获的表达式。

© www.soinside.com 2019 - 2024. All rights reserved.