子集,然后绑定按预期工作
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
答案 0 :(得分:1)
我从不使用!!
或!!!
,因为经常出现问题。
相反,我使用UQ
。我不知道这是不是很好的做法,但它确实有用。
bind_rows(
UQ(mtcars %>% select(var)),
UQ(mtcars %>% select(var))
)
答案 1 :(得分:1)
这是rlang中与值拼接有关的错误。所有带点的功能都支持拼接,即使它们没有引用它们的输入。这很方便,因为当你有一个参数列表时,你不必使用do.call()
这些函数,你可以拼接列表。
由于技术原因,该机制略有不同。目前存在一个错误,在select()
调用中使用了值拼接而不是调用拼接。这应该很快修复。