2012-08-16 17 views
15

(通過對象關係映射,我的意思是這裏描述:Wikipedia: Object-relational mapping在R中是否有一個用於對象關係映射的包?

這裏是我能想象在讀該工作:一種「虛擬數據幀」是鏈接到數據庫,並返回訪問時SQL查詢的結果。例如,head(virtual_list)實際上會在映射的數據庫上返回(select * from mapped_table limit 5)的結果。

我發現這post by John Myles White,但似乎在過去3年沒有進展。

是否有工作包實現了這一點?

如果沒有,

  1. 將是有益的?
  2. 什麼是實施它的最佳方式(S4?)?
+0

Oracle有一個產品可以在R ... – 2012-08-16 20:59:03

回答

10

最近的軟件包dplyr正在實現這一功能(以及其他令人驚歎的功能)。

下面是從功能src_mysql()的例子說明:

# Connection basics --------------------------------------------------------- 
# To connect to a database first create a src: 
my_db <- src_mysql(host = "blah.com", user = "hadley", 
    password = "pass") 
# Then reference a tbl within that src 
my_tbl <- tbl(my_db, "my_table") 

# Methods ------------------------------------------------------------------- 
batting <- tbl(lahman_mysql(), "Batting") 
dim(batting) 
colnames(batting) 
head(batting) 
2

看起來像John Myles White他已經放棄了。

有一些解決方法解釋here

7

有一箇舊的不受支持的包,SQLiteDF,這樣做。從源代碼構建並忽略大量錯誤消息。

> # from example(sqlite.data.frame) 
> 
> library(SQLiteDF) 
> iris.sdf <- sqlite.data.frame(iris) 
> iris.sdf$Petal.Length[1:10] # $ done via SQL 
[1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 
1

我認爲這不會有用。 R不是真正的OOP語言。 R中的「中心」數據結構是數據幀。無需對象 - 關係映射here.What你想要的是SQL表和數據幀和RMySQL和RODBC之間的映射提供了這一點:

dbGetQuery返回查詢的結果在數據幀和dbWriteTable將數據插入到表中或執行批量更新(從數據框)。

+0

沒有R6類地址OOP夠好嗎? – jangorecki 2015-07-14 20:17:19

+0

我不同意這種觀點:沒有有用的語言是純粹的任何特定類型。 R聲稱是一種功能性語言,但它也允許許多副作用。 R應該有辦法創建一個ORM,我很高興'dplyr'加強了。 – 2017-12-28 22:29:21

0

作爲一個經驗豐富的R用戶,我不會使用它。首先,這個「虛擬框架」使用起來會很慢,因爲您經常需要在R內存和數據庫之間進行同步。它還需要鎖定數據庫表,否則由於其他編輯同時發生而導致無法預料的結果。

最後,我不認爲R適用於執行promise對象的不同評估。執行myFrame$foo[ myFrame$foo > 40 ]仍然會獲取完整foo列,因爲您無法實現從R到SQL的完整翻譯方案。

因此,我寧願從查詢中加載數據幀(),使用它,並在需要時將其寫回數據庫。

+0

感謝您的回答。我同意記憶和鎖定。這可能是一個問題,取決於項目。關於行選擇的例子:完整的翻譯方案可能不可行,但是至少大量的常見操作應該是可行的(例如,示例中的行選擇將是微不足道的)... – nassimhddd 2012-08-30 12:18:32

+0

行選擇示例是對你來說微不足道。讓我們進一步推進:前10%的百分點?隨機n = 100次採樣?等等......在實踐中,這個限制很快就達到了。 – parasietje 2012-08-30 13:53:46

1

下的各種驅動程序包,用於查詢的DB(DBI,RODBC,RJDBC,RMySql,...) 和dplyr,還有sqldf https://cran.r-project.org/web/packages/sqldf/

這會自動導入數據幀到db中&讓你通過sql查詢數據。最後,數據庫被刪除。