与现有列名冲突时强制 dplyr 评估传递的符号/quosure

Forcing dplyr to evaluate passed symbol / quosure when conflicting with existing column name

问题

我想以 am <- "cyl" 的形式将列名字符串转换为 dplyr::arrange。目的是按列排序cyl.

期望的结果

dplyr::arrange(mtcars, cyl)

尝试次数

am <- "cyl"

1) rlang::quo

dplyr::arrange(mtcars, !!rlang::quo(am))

am 而非 cyl 排序。

2) rang::ensym

dplyr::arrange(mtcars, !!rlang::ensym(am))

am 而非 cyl 排序。

3) 库里卷曲

dplyr::arrange(mtcars, {{am}})

未排序。


背景

在实际功能中,我按创建的索引列对数据框进行排序。具有列名的变量称为 index_column。我想保护自己免受包含 index_column 的实际数据的影响,尽管这种情况极不可能发生。我可以使用 make.names 并扫描唯一的列名来解决这个问题,但我对解决上述问题更感兴趣。

会是sym

out2 <-  dplyr::arrange(mtcars, !!rlang::sym(am))

-使用 OP 的预期进行测试

out1 <- dplyr::arrange(mtcars, cyl)
identical(out1, out2)
#[1] TRUE

推荐的方法是使用.data:

dplyr::arrange(mtcars, .data[[my_variable]])