2

子集然后绑定按预期工作

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

4

2 回答 2

1

我从不使用!!,或者!!!因为经常出现问题。相反,我使用UQ. 我不知道这是否是一个好习惯,但它确实有效。

bind_rows(
  UQ(mtcars %>% select(var)),
  UQ(mtcars %>% select(var))
)
于 2017-07-23T10:44:57.347 回答
1

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

由于技术原因,该机制有些不同。当前存在一个错误,并且在调用中使用了值拼接而不是调用拼接select()。这应该很快得到解决。

于 2017-07-23T11:00:03.417 回答