bind_rows和tidyeval拼接失败

时间:2017-07-23 10:39:32

标签: r rlang tidyeval

子集,然后绑定按预期工作

var <- c("wt", "mpg")
mtcars %>% select(!!!var) -> df1
mtcars %>% select(!!!var) -> df2
bind_rows(df1, df2)

但如果我们跳过中间步骤

bind_rows(
   mtcars %>% select(!!!var),
   mtcars %>% select(!!!var)
)

它以Error: only lists can be spliced

失败

2 个答案:

答案 0 :(得分:1)

我从不使用!!!!!,因为经常出现问题。 相反,我使用UQ。我不知道这是不是很好的做法,但它确实有用。

bind_rows(
  UQ(mtcars %>% select(var)),
  UQ(mtcars %>% select(var))
)

答案 1 :(得分:1)

这是rlang中与值拼接有关的错误。所有带点的功能都支持拼接,即使它们没有引用它们的输入。这很方便,因为当你有一个参数列表时,你不必使用do.call()这些函数,你可以拼接列表。

由于技术原因,该机制略有不同。目前存在一个错误,在select()调用中使用了值拼接而不是调用拼接。这应该很快修复。