R 绑定行和整洁拼接失败
按预期进行分包和装订R 绑定行和整洁拼接失败,r,rlang,tidyeval,R,Rlang,Tidyeval,按预期进行分包和装订 var <- c("wt", "mpg") mtcars %>% select(!!!var) -> df1 mtcars %>% select(!!!var) -> df2 bind_rows(df1, df2) 它失败,出现错误:只有列表可以拼接我从不使用或因为经常会出现问题。 相反,我使用UQ。我不知道这是否是一个好的做法,但它是有效的 bind_rows( UQ(mtcars %>% select(var)), UQ(m
var <- c("wt", "mpg")
mtcars %>% select(!!!var) -> df1
mtcars %>% select(!!!var) -> df2
bind_rows(df1, df2)
它失败,出现
错误:只有列表可以拼接
我从不使用代码>或代码>因为经常会出现问题。
相反,我使用UQ
。我不知道这是否是一个好的做法,但它是有效的
bind_rows(
UQ(mtcars %>% select(var)),
UQ(mtcars %>% select(var))
)
这是rlang中的一个bug,它与值拼接有关。所有采用dots的函数都支持拼接,即使它们不引用输入。这很方便,因为您不必对这些函数使用do.call()
由于技术原因,机制有点不同。当前有一个bug,在select()
调用中使用了值拼接而不是调用拼接。这应该很快就会修复。这是rlang中的一个错误,请在那里发布一个问题。实际上,我刚刚打开了一个问题:@lionel这是可能的。但是为什么它会给出相同的结果呢?它给出相同的结果是因为它什么都不做。在Rickard的版本中,拼接创建了这个调用:select(“wt”、“mpg”)
。在您的版本中,UQ()
不起任何作用,select调用的结果如下:select(c(“wt”、“mpg”)
,它也可以工作(但在下一个版本中不起作用,请参阅)
bind_rows(
UQ(mtcars %>% select(var)),
UQ(mtcars %>% select(var))
)