扩展dplyr并使用内部函数

时间:2015-07-10 15:34:56

标签: sql r dplyr r-s3

我正在研究RSQLServer包的分支,并尝试实现联接。使用当前版本的软件包,可以使用sql_join.DBIConnection实现任何DBI连接数据库的连接。但是,该实现对SQL服务器不起作用。例如,它使用SQL服务器不支持的USING

我已经使用了这个函数sql_join.SQLServerConnection的一个版本(虽然尚未完成)。我尽可能基于sql_join.DBIConnection的功能。我遇到的一个问题是sql_join.DBIConnectiondplyr内调用了许多未导出的函数,例如common_by。目前,我使用dplyr:::common_by解决了这个问题,但我知道这不是理想的做法。

我应该:

  1. 请问Hadley Wickham / Romain Francois导出相关功能,以便让人们更轻松地开发基于dplyr构建的包?
  2. 将内部功能复制到我正在处理的包中?
  3. 继续使用:::运算符来调用函数吗?
  4. 别的什么?
  5. 显然,使用选项3,接口可能会发生变化(因为它们不是导出的功能),并且包装会在较长时间内中断。

    示例代码:

    sql_join.SQLServerConnection <- function (con, x, y, type = "inner", by = NULL, ...) {
      join <- switch(type, left = sql("LEFT"), inner = sql("INNER"), 
                     right = sql("RIGHT"), full = sql("FULL"), stop("Unknown join type:", 
                                                                    type, call. = FALSE))
      by <- dplyr:::common_by(by, x, y)
      using <- FALSE # all(by$x == by$y)
      x_names <- dplyr:::auto_names(x$select)
      y_names <- dplyr:::auto_names(y$select)
    # more code
    }
    

1 个答案:

答案 0 :(得分:1)

在我看来,您可能不必使用这些功能动词。由于dplyr现在将其数据库功能放在dbplyr中,因此相关代码为here。我在那里看不到使用auto_namescommon_by

我强烈建议您在阅读Creating New Backends后按照SQL Translation中的步骤进行操作。

对于使用JDBC的Apache Drill,也可能值得查看其他一些备用后端,例如Hrbrmaster&#39;} sergeant package