1

问题

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

期望的结果

dplyr::arrange(mtcars, cyl)

尝试

am <- "cyl"

1)rlang::quo

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

amnot排序cyl

2)rang::ensym

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

amnot排序cyl

3)咖喱卷

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

未排序。


背景

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

4

2 回答 2

2

这将是sym

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

- 使用 OP 的预期进行测试

out1 <- dplyr::arrange(mtcars, cyl)
identical(out1, out2)
#[1] TRUE
于 2021-01-12T20:27:19.687 回答
2

The recommended way is to use .data:

dplyr::arrange(mtcars, .data[[my_variable]])
于 2021-01-13T09:25:34.460 回答