r - 仅从脚本中获取单个变量

标签 r rpostgresql dbplyr

我有一个 postgresql 数据库连接,想要从数据库获取一个表。也许将连接信息保存在不同的文件中是一个好习惯? 我刚才有两个文件:

#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() 获取表。此外,您可以轻松扩展它以获取其他表或包含一些连接实用程序函数。

关于r - 仅从脚本中获取单个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048341/

相关文章:

r - parallel::clusterExport 如何从全局环境传递嵌套函数?

复数矩阵的 R 图

mysql - R dbplyr WHERE 子句 cp1250 字符集

r - dplyr 和 postgresql 获取 group_indices

sql - 如何在 R Markdown block 中转义 SQL 代码中的字符?

r - 为什么 lapply() 将我的 R 数据框转换为列表?

r - 使用操作按钮 Shiny 更新表格

RPostgreSQL 安装错误 - RPostgreSQL.so : undefined symbol: PQpass

r - src_postgres 和 dbConnect 函数将 R 与 postgres 连接的区别

R连接到postgres在dbExistsTable中返回false,但这是错误的