仅从脚本获取单个变量
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")
这使得 con
和 thetable
变量在 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 或包含一些连接实用程序功能。
我有一个 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")
这使得 con
和 thetable
变量在 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 或包含一些连接实用程序功能。