在 Linux 環境下使用 R 語言操作關聯式資料庫(如 MySQL、PostgreSQL、Oracle、SQLite)時,需安裝相應的擴展包。主流有兩種連接架構:ODBC 與 DBI。本文詳細比較兩者差異,並以 RSQLite 為例示範 DBI 方式的完整操作流程。

| 維度 | ODBC 方式 | DBI 方式 |
|---|---|---|
| 核心套件 | RODBC |
DBI + 個別資料庫驅動套件 |
| 驅動安裝 | 需額外安裝系統層級 ODBC 驅動程式 | 直接安裝對應 R 套件(含驅動) |
| 資料庫支援 | 通用介面,理論支援所有有 ODBC 驅動的 DB | 各資料庫有專屬套件,保留原生特性 |
| 程式碼可攜性 | 高(統一介面) | 中(需依資料庫調整 SQL 方言) |
| 效能與功能 | 通用層可能有額外開銷 | 直連驅動,效能較佳,支援進階功能 |
筆者較推薦 DBI 方式,因其保留各資料庫原生特性、效能更佳、除錯更直觀。主要 DBI 驅動套件對照表:
RMySQLRSQLiteROracleRPostgreSQL# 下載 sqlite3 命令列工具(單一執行檔)
# 建立資料庫與匯入結構/資料腳本
sqlite3 train.db
.read Scheme.sql
.read Data.sql
.backup train.db
.quit
install.packages('RSQLite') # 安裝套件
library(RSQLite)
# 建立連線
con <- dbConnect(RSQLite::SQLite(), dbname = 'd:/sqlite/train.db')
# 探索結構
dbListTables(con)
dbListFields(con, 'Apply')
# 執行 SQL 查詢
sql <- "SELECT sName, GPA, decision, cName
FROM Student, Apply
WHERE Student.sID = Apply.sID
AND sizeHS < 1000 AND major = 'CS' AND cName = 'Stanford'"
data <- dbGetQuery(con, sql)
print(data)
# 關閉連線
dbDisconnect(con)
RMySQL、RPostgreSQL 等)。RODBC。掌握 DBI 架構,能讓 R 語言資料分析流程更穩健、高效且可重現。