仅从脚本获取单个变量

Source only a single variable from a script

我有一个 postgresql 数据库连接,想从数据库中获取一个 table。大概将连接信息保存在不同的文件中是一种好习惯? 我现在有两个文件:

#getthetable.R
library(tidyverse)
library(dbplyr)


## connect to db
con <- src_postgres(dbname = "thedbname",
                    host = "blablabla.amazonaws.com",
                    port = NULL,
                    user = "myname",
                    password = "1234")

thetable <- tbl(con, "thetable") %>% select(id, apples, carrots) %>% collect

然后:

#main.R
library(tidyverse)

## get data from getthetable script with connection
source("rscripts/getthetable.R") 

这使得 conthetable 变量在 main.R 中可用。我只想要 getthetable.R 中的变量 thetable。我怎么做?遗漏 con 变量?

此外,在 r 中使用数据库连接时是否有最佳实践?我的想法合乎逻辑吗?我正在做的事情是否有缺点,或者大多数人只是将连接与主要脚本放在一起?

我也喜欢在不同的文件中捕获此类内容(如连接),但也在这样的指定环境中:

ConnectionManager <- local({

  con <- src_postgres(dbname = "thedbname",
                      host = "blablabla.amazonaws.com",
                      port = NULL,
                      user = "myname",
                      password = "1234")



  collectTable <- function() {

    tbl(con, "thetable") %>% select(id, apples, carrots) %>% collect

  }

  list(collectTable = collectTable)


})

这样你在获取文件后只有一个对象ConnectionManager并且可以用ConnectionManager$collectTable()得到table。此外,您可以轻松扩展它以获取其他 table 或包含一些连接实用程序功能。