2012-08-16 9 views
15

(オブジェクトリレーショナルマッピングすることで、私はここで説明されているものを意味する:Wikipedia: Object-relational mapping):「仮想データフレーム」の種類は、データベースにリンクされ、戻りここRにオブジェクトリレーショナルマッピングのパッケージがありますか?

私はRで、この作品を想像することができる方法でありますアクセス時にSQL照会の結果。たとえば、head(virtual_list)は、実際には(select * from mapped_table limit 5)という結果をマップされたデータベースに返します。

私はこれを見つけましたがpost by John Myles Whiteですが、過去3年間は進歩がないようです。

これを実装する実装パッケージはありますか?

ていない場合は、

  1. はそれが有用であろうか?
  2. それを実装する最良の方法は何でしょうか(S4?)?
+0

OracleはこれをRで実行する製品を持っています。 –

答えて

10

最近のパッケージdplyrはこれを(他の驚くべき機能の中でも)実装しています。ここ

関数src_mysql()の例からの図である:のDB(DBI、RODBC、RJDBC、RMySqlを照会するための様々なドライバパッケージに

# 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クラスのアドレスは十分ですか? – jangorecki

+0

私はこの見解に同意しません。有用な言葉は特定のタイプの「純粋」ではありません。 Rは機能的な言語であると主張していますが、多くの副作用も可能です。 RにORMを作成する手段があるはずです。私は 'dplyr'が強化されたことをうれしく思います。 –

0

経験豊富なRユーザーとして、私はこれを使用しません。まず、Rメモリとデータベースを常に同期させる必要があるため、この「仮想フレーム」は使用が遅くなります。また、データベーステーブルをロックする必要があります。そうしないと、他の編集が同時に発生するため、予期しない結果が生じることがあります。

最後に、私はRがpromiseオブジェクトの異なる評価を実装するのに適しているとは思わない。 myFrame$foo[ myFrame$foo > 40 ]を実行すると、foo列全体がフェッチされます。これは、RからSQLへの完全な翻訳スキームを実装することができないためです。

したがって、私はクエリからdataframe()をロードし、使用し、必要に応じてデータベースに書き戻します。

+0

あなたの答えをありがとう。私は記憶とロックに同意します。それはプロジェクトによっては問題になる可能性があります。行選択の例について:完全な翻訳スキームは可能ではないかもしれませんが、少なくとも一般的な操作が可能でなければなりません(この例の行選択は簡単です)。 – nassimhddd

+0

行選択の例はあなたにとって些細なことです。これをさらに進めてみましょう:上位10%パーセンタイル?ランダムn = 100サンプリング?実際には、これの限界は非常に迅速に達成されます。 – parasietje

1

次に...) とdplyr、これは自動的にSQLを介してデータを照会してみましょうデシベル&にデータフレームをインポートしますhttps://cran.r-project.org/web/packages/sqldf/

sqldfもあります。最後にdbが削除されます。

関連する問題