如何改写dplyr函数仅选择未引用列向量的首个元素
解决方案
可以利用tidyeval工具包(rlang)的表达式捕获与操作功能,提取参数表达式中的第一个列名,改写后的函数如下:
library(dplyr) library(rlang) f2 <- function(x = c(am, vs)) { # 捕获参数x的原始表达式,提取第一个列名 target_col <- call_args(enexpr(x))[[1]] mtcars %>% select(!!target_col) }
代码说明
enexpr(x):捕获参数x的原始表达式(默认调用时为c(am, vs))call_args():提取该调用表达式的所有位置参数,得到包含am和vs的表达式列表[[1]]:取列表的第一个元素,即目标列名am的表达式!!target_col:将提取到的列名表达式注入select()中,实现仅选择第一个指定列
验证调用结果:
f2() # 等价于 mtcars %>% select(am)
内容的提问来源于stack exchange,提问作者thothal
相关产品推荐
相关产品推荐

