在函数内部使用dplyr :: tbl

时间:2018-07-06 13:04:28

标签: r dplyr rlang dtplyr

关于在函数内部使用dplyr的问题,我现在有各种各样的答案,但是我尝试了所有方法,但都没有效果。

这是我的简单功能:

loadData_gfi_zse <- function(table_name = "mytable_name"){
  con <- DBI::dbConnect(RMySQL::MySQL(), 
                        host = "xxxx",
                        user = "xxxx",
                        password = "xxxx",
                        dbname = "xxxxs")
  table_name <- substitute(table_name)
  df <- tbl(con, lazyeval::interp(table_name))
  dbDisconnect(con)
  df_clean
}

我尝试了机智rlang::!!和其他方法,但均无济于事。这应该很简单,但是我无法正常工作。

1 个答案:

答案 0 :(得分:1)

library(dplyr)

con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "dummydb.sqlite")
DBI::dbWriteTable(con, "iris", head(iris))
DBI::dbDisconnect(con)

loadData_gfi_zse <- function(table_name = "mytable_name") {
  con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "dummydb.sqlite")
  on.exit(DBI::dbDisconnect(con))
  collect(tbl(con, table_name))
}

loadData_gfi_zse(table_name = "iris")

# # A tibble: 6 x 5
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#          <dbl>       <dbl>        <dbl>       <dbl> <chr>  
# 1          5.1         3.5          1.4         0.2 setosa 
# 2          4.9         3            1.4         0.2 setosa 
# 3          4.7         3.2          1.3         0.2 setosa 
# 4          4.6         3.1          1.5         0.2 setosa 
# 5          5           3.6          1.4         0.2 setosa 
# 6          5.4         3.9          1.7         0.4 setosa 

unlink("dummydb.sqlite")