簡體   English   中英

在我的 R package 中包含數據庫連接

[英]Include Database Connection in my R package

每天,我都從 R 連接到公司數據庫。 目前,我有一個 R 腳本,它建立連接並承擔所有分析前的數據准備(變異和連接)。 我想將其包含在 R-package DWH中,以便與同事分享此過程。

這是一些示例代碼:

creds <- read.csv2('C:/creds.csv')

con <- ROracle::dbConnect(drv = DBI::dbDriver("Oracle"),
                               username = creds$user, password= creds$pwd,
                               dbname = 'DWH',
                               prefetch = FALSE, bulk_read = 1000L, stmt_cache = 0L,
                               external_credentials = FALSE, sysdba = FALSE)

PREST <- dplyr::tbl(con, dbplyr::in_schema('ADWH', 'PREST')) %>%
    transmute(date = A_DWH_DATE_TODAY,
              amount = A_DWH_POL_IND_COLL_AMOUNT)

理想情況下,我想用library(DWH)加載 package ,然后每個人都應該可以使用PREST object 以供進一步使用,例如

library(DWH)
PREST %>% filter(date > 201912) 

這在采購 R 腳本時效果很好。 如何在 R 包中實現這一點? 我正在使用 ROracle,但這應該與任何其他 odbc 數據庫連接的過程相同。

雖然我同意@r2evans 的觀點,即這不是一個好的設計決策,但如果您致力於這樣做,您可以采取的方法是 function 將變量分配給全局環境(根據這個問題)。

這看起來像:

create_globals = function(){
    creds <- read.csv2('C:/creds.csv')

    con <- ROracle::dbConnect(drv = DBI::dbDriver("Oracle"),
                                   username = creds$user, password= creds$pwd,
                                   dbname = 'DWH',
                                   prefetch = FALSE, bulk_read = 1000L, stmt_cache = 0L,
                                   external_credentials = FALSE, sysdba = FALSE)

    PREST <- dplyr::tbl(con, dbplyr::in_schema('ADWH', 'PREST')) %>%
        transmute(date = A_DWH_DATE_TODAY,
                  amount = A_DWH_POL_IND_COLL_AMOUNT)

    assign("creds", cred, envir = .GlobalEnv)
    assign("con", con, envir = .GlobalEnv)
    assign("PREST", PREST, envir = .GlobalEnv)
}

然后你的 package 使用看起來像:

library(DWH)
create_globals()
PREST %>% filter(date > 201912) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM