19

(オブジェクト リレーショナル マッピングとは、ウィキペディア: オブジェクト リレーショナル マッピングで説明されている内容を意味します。)

R でこの作業をどのように想像できるかを次に示します。一種の「仮想データ フレーム」がデータベースにリンクされ、アクセスすると SQL クエリの結果が返されます。たとえば、マップされたデータベースhead(virtual_list)の結果を実際に返します。(select * from mapped_table limit 5)

John Myles White によるこの投稿を見つけましたが、この 3 年間は進展がないようです。

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

そうでない場合は、

  1. 役に立ちますか?
  2. それを実装する最良の方法は何ですか(S4?)?
4

6 に答える 6

10

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

function の例からの図を次に示します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)
于 2014-04-24T14:18:44.263 に答える
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
于 2012-08-23T15:42:27.180 に答える
2

ジョン・マイルズ・ホワイトは諦めたようだ。

here で説明されている回避策が少しあります。

于 2012-08-23T14:56:00.390 に答える
1

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

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

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

于 2012-08-30T10:50:35.920 に答える
1

役に立たないと思います。R は真の OOP 言語ではありません。R の「中心的な」データ構造はデータ フレームです。ここではオブジェクト リレーショナル マッピングは必要ありません。必要なのは SQL テーブルとデータ フレーム間のマッピングであり、RMySQL と RODBC はまさにそれを提供します。

dbGetQueryを使用してクエリの結果をデータ フレームに返し、dbWriteTableを使用してテーブルにデータを挿入するか、(データ フレームから) 一括更新を実行します。

于 2012-08-28T00:40:10.820 に答える