使用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的主要内容,如果未能解决你的问题,请参考以下文章

R语言数据表匹配和拼接-merge函数

函数积累

在C ++中用2个double值创建一个类

数学期望dp

r语言 merge函数by.x啥意思

尝试将脚本作为函数执行