与现有列名冲突时强制 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]])
问题
我想以 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]])