r语言 - 使用 by=c(x=y) 错误在函数中执行 dplyr::left_join



我正在尝试围绕dplyr::left_join编写一个函数,以简化我需要多次执行的重复过程。

请考虑以下代码:

testdf <- data.frame(X1 = c("A", "B", "C"), X2 = c(1,2,3))
testdf2 <- data.frame(Y1 = c("a", "b", "c"), Y2 = c(1,2,3))
testdf3 <- dplyr::left_join(testdf, testdf2, by=c("X2" = "Y2"))

这种方法有效,因为 testdf3 将是一个由 X1、X2 和 Y1 组成的数据帧。 现在,考虑以下函数:

test_function <- function(df1, df2, col1, col2){
output_dataframe <- dplyr::join(df1, df2, by=(col1 = col2))
return(output_dataframe)
}
output1 <- test_function(testdf, testdf2, "X2", "Y2")

这段代码给我抛出以下错误:

"错误:by不能包含 LHS 中缺少的联接列col1

这可能是一些小事,因为在我看来它不会将列名变量正确复制到left_join函数中,但我已经在这个问题上苦苦挣扎了很长一段时间。

我尝试了以下方法:

test_function <- function(df1, df2, col1, col2){
helper <- c(col1 = col2)
output_dataframe <- dplyr::join(df1, df2, by=helper)
return(output_dataframe)
}

但是,错误是相同的,我不知道如何解决这个问题。

我需要这个函数来压缩我需要重复执行的几个步骤,因此在另一个函数中执行left_join将帮助我保持代码干净和可读性。有谁知道如何解决这个问题?

我认为这与评估有关(见这里:https://adv-r.hadley.nz/evaluation.html(也许不是...

我发现了一种笨拙的方法,但它对我有用:

test_function <- function(df1, df2, col1, col2){
helper <- col2
names(helper) <- col1
output_dataframe <- dplyr::left_join(df1, df2, by=helper)
return(output_dataframe)
}

最新更新