使用by = c(x = y)错误在函数内执行dplyr :: left_join
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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)
}
以上是关于使用by = c(x = y)错误在函数内执行dplyr :: left_join的主要内容,如果未能解决你的问题,请参考以下文章