R语言函数中如何通过...参数传递多列作为表连接键?
解决R语言函数中通过...参数传递连接列的问题
你的代码核心问题出在col_names <- deparse(cols)这一步:enquos(...)已经捕获了传入的列引用(quosures对象),但deparse()会把这个对象转换成字符串,完全不符合join_by()的需求——join_by()需要的是直接的列引用,而非字符串形式的表达式。
修正后的代码如下:
library(tidyverse) dat <- diamonds |> head(10) test_fn <- function(...){ dat1 <- dat dat2 <- dat cols <- enquos(...) left_join( dat1, dat2, by = join_by(!!!cols), relationship = "many-to-many" ) }
关键说明
enquos(...)会捕获调用函数时传入的所有列参数,返回一个quosures列表,每个元素对应一个列的引用!!!cols是tidyverse中的解包拼接语法,会把quosures列表里的每个元素直接展开到join_by()中,效果等同于手动写join_by(cut, carat, clarity)- 移除多余的
deparse(cols)步骤,就能让连接逻辑正常运行
调用test_fn(cut, carat, clarity)时,函数会正确以这三列为连接键完成两个表的左连接。
内容的提问来源于stack exchange,提问作者alejandro_hagan
相关产品推荐
相关产品推荐

