编写一个使用 dbplyr 调用 tbl() 的包函数

Writing a package function that uses a dbplyr call to tbl()

我有一个简单的函数,应该使用 DBI::dbConnect() 连接获取 table。我在调用 tbl() 时遇到问题,它在交互式会话中运行良好。

我的函数:

a2_db_read <- function(con, tbl_name, schema = "dbo"){
  if(schema == "dbo"){
    dplyr::tbl(con, tbl_name)
  }
  else{
    dplyr::tbl(con, dbplyr::in_schema(schema, tbl_name))
  }
}

如果我打电话 dplyr::tbl() 我得到:

Error in UseMethod("tbl") : 
  no applicable method for 'tbl' applied to an object of class "Microsoft SQL Server"

如果我打电话 dbplyr::tbl() 我得到:

a2_db_read(a2_con_uat, "AVL Data")
Error: 'tbl' is not an exported object from 'namespace:dbplyr'

我怎样才能使函数调用成功?我的包裹进口是:

Imports: 
    DBI,
    dbplyr,
    dplyr,
    ggplot2,
    odbc

我用 dplyr::tbl() 得到了它,正确的用法。

问题是我的连接是作为对象存储在包中的,而实际上每次重新启动 R 时都需要建立连接。

在全新的 R 环境中,存储的陈旧连接导致错误:

Error in UseMethod("tbl") : no applicable method for 'tbl' applied to an object of class "Microsoft SQL Server"

当我重新生成连接时,它起作用了。