r - 与现有列名冲突时强制 dplyr 评估传递的符号/quosure
问题描述
问题
我想将列名的字符串转换dplyr::arrange
为表单am <- "cyl"
。目的是按列排序cyl
。
期望的结果
dplyr::arrange(mtcars, cyl)
尝试
am <- "cyl"
1)rlang::quo
dplyr::arrange(mtcars, !!rlang::quo(am))
按am
not排序cyl
。
2)rang::ensym
dplyr::arrange(mtcars, !!rlang::ensym(am))
按am
not排序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
推荐阅读
- javascript - PropTypes 和 React Context API 语法错误
- r - 解析RShiny selectinput multiple=true
- here-api - NMARoutingErrorNetwork通讯说明
- java - java.lang.AbstractMethodError:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 不继承抽象 javax.xml.parsers.DocumentBuilderFactory
- docker - 重定向码头工人拉
- c# - 安装版本和调试时的路径有何不同?
- jenkins - 无法找到请求目标的有效认证路径:Jenkins
- python - Python,范围()
- docker - 无法通过警报管理器发送电子邮件
- kotlin - 矛盾——平等的实体不平等