R语言函数参数同时用作符号与字符串的正确性问询
关于dplyr函数中参数同时作为符号和字符串使用的正确性确认
你的代码思路是完全正确的,而且已经能正常运行啦!不过咱们可以聊聊细节和优化方向:
当前代码的正确性验证:
你用enquo(hello)捕获了传入的裸符号参数(比如hej),后续用!!hello解引用就能在dplyr动词里把它当作列符号使用;而as_string(ensym(hello))确实能把捕获的符号转换成字符串,调用f(hej)会返回"hej",这个字符串完全可以直接放到inner_join的by参数里,逻辑上没有问题。更简洁的写法建议:
其实不需要同时混用enquo和ensym,用ensym()就可以一箭双雕——它专门用于捕获裸符号或字符串形式的参数并转换成符号类型,既支持用!!解引用作为符号使用,也能直接转成字符串:f <- function(hello){ hello <- ensym(hello) # 作为符号在dplyr中使用,比如选择列 mtcars %>% select(!!hello) # 转换为字符串用于join的by参数 hello_str <- as_string(hello) inner_join(df1, df2, by = hello_str) }这种写法更简洁,而且还兼容字符串形式的输入(比如调用
f("hej")也能正常工作),ensym()会自动把字符串转成符号,转换为字符串时也不会出问题。补充小提示:
如果你的场景里只需要字符串形式的列名用于by参数,也可以用rlang::as_name()替代as_string(ensym(hello)),效果是一样的,代码会更短一点:as_name(hello)。
内容的提问来源于stack exchange,提问作者xhr489
相关产品推荐
相关产品推荐

