8

私は、多くのアナリストが R で統計モデルを作成しているプロジェクトに取り組んでいます。通常、アナリストはモデル オブジェクト (.Rdata ファイル) を提供し、さまざまなデータセットに対してそれらの実行を自動化します。

私の問題は次のとおりです。

  • データベースを使用して、これらの .RData ファイルをそこに保存できますか? これを行うためのヒントはありますか?(現在、.Rdata ファイルをディスクに保存し、データベースを使用して位置情報を保存しています)

  • モデルを作成する前にデータの前処理を行った他のアナリストから、多くの R スクリプトを受け取ります。PMML を使用して、手動の介入なしでこのプロセスを繰り返し可能にした経験のある人はいますか? PMML は、前処理ステップ、モデリング ステップをマークアップ タグとして保存し、新しいデータセットで同じことを繰り返します。

提案とフィードバックに感謝します。

-ひどい

4

4 に答える 4

6

はい、これは、RMySQLandパッケージを使用して、または orパッケージDBIを介してR にリンクされた MySQL などを使用して可能です。それらがすべて blob をサポートしているかどうかは 100% わかりませんが、最悪のシナリオでは、ASCII 表現を使用してそれらをテキスト フィールドに入れることができます。RODBCRJDBC

トリックは関数を使用することですserialize()

> x <- rnorm(100)
> y <- 5*x+4+rnorm(100,0,0.3)
> tt <- lm(y~x)
> obj <- serialize(tt,NULL,ascii=T)

obj をデータベースに保存または取得できるようになりました。実際には、ASCII (またはバイナリ) コードのベクトルにすぎません。ascii=F はバイナリ表現を提供します。それを取得した後、次を使用します。

> unserialize(obj)
Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
      4.033        4.992  

編集:pmmlに関しては、pmmlCRANにパッケージがあります。多分それはあなたをどこかに連れて行きますか?

于 2010-10-17T22:21:34.323 に答える
2

.RData ファイルには多くの R オブジェクトを含めることができるため、その処理方法を決定する必要があることに注意してください。.RData ファイルを添付すると、pos 引数を指定して ls() を使用してその中のオブジェクトを取得できます。

> attach("three.RData")
> ls(pos=2)
[1] "x" "y" "z"

次に、それらをループし、その位置から名前で get() して、リストにシリアル化できます (p は私のリスト インデックスです)。

> s=list()
> p=1
>  for(obn in obnames){
+ s[[p]] = serialize(get(obn,pos=2),NULL,ascii=TRUE)
+ p=p+1
+ }

ここで、s の要素を DB に噴出する必要があります。おそらく、Name (ある種の char) と Value (シリアル化されたデータ、BLOB または varchar だと思います) のテーブルにあります。

于 2010-10-18T09:21:44.680 に答える
2

R は、任意のオブジェクトをシリアル化および逆シリアル化できます。これは、私のダイジェストパッケージが、シリアル化されたオブジェクトに対してハッシュ関数を実行することによって、いわゆる「ハッシュ ダイジェスト」を作成する方法です。

したがって、シリアル化されたオブジェクト (にシリアル化できるcharacter) を取得したら、それを保存します。NoSQL キー/値ストアと同様に、リレーショナル データベースはこれをサポートします。どちらのバックエンドでも、「ハッシュ ダイジェスト」をキーとして使用することも、その他のメタ情報を使用することもできます。

他の代替手段は、たとえばRProtoBufであり、これも非常に効率的にシリアル化および逆シリアル化できます (ただし、最初に .proto ファイルを作成する必要があります)。

于 2010-10-17T22:34:32.807 に答える
1

他の人が述べたように、はい、モデルからの出力をテキストとしてデータベースに保存できます。ただし、それがあなたにとって非常に役立つとは確信していません。

これらのモデルを後日再作成できるようにする場合は、出力ではなく、モデルを作成した入力データセットとコードを保存する必要があります。

もちろん、モデル出力を保存することもできますが、その場合、データベースでのその形式を考慮する必要があります。特定のモデル結果を見つけてフィルタリングまたは順序付けできるようにしたい場合は、構造 (およびメタデータ) を使用してそれらをデータベースに追加すると、はるかに簡単になります。

たとえば、有意な性別反応があったすべてのモデルを取得したい場合があります。その場合、ASCII のチャンクを検索するのではなく、その情報をデータベースの別のフィールドとして追加する必要があります。モデルの作成者や作成日などの他の情報を追加すると、後で役立ちます。

于 2010-10-18T15:36:42.477 に答える