Frage

Ich arbeite an einem Projekt, wo ich viele Analysten haben die Erstellung statistischer Modelle in R. Sie bieten mir in der Regel mit den Modellobjekten (.rdata-Dateien) und ich automatisieren sie für verschiedene Datensätze ausgeführt wird.

Mein Problem ist:

  • Kann ich eine Datenbank und speichern Sie diese .rdata Dateien dort? Irgendwelche Hinweise auf dies zu tun? (Ich speichere derzeit die .rdata Dateien auf die Festplatte und verwenden eine Datenbank zum Speichern von Standortinformationen)

  • Ich bekomme eine Menge von R-Skripte von anderen Analysten, die eine Vorverarbeitung der Daten getan haben, bevor sie die Modelle erstellen. Hat jemand Erfahrung PMML mit diesem Verfahren wiederholbar zu machen, ohne manuelle Eingriffe? PMML speichert die Vorverarbeitungsschritte, Modellierungsschritte als Markup-Tags, und würde das gleiche auf einen neuen Datensatz wiederholen.

Vielen Dank für die Anregungen und Feedback.

-Harsh

War es hilfreich?

Lösung

Ja, das ist möglich, zB mit MySQL R mit dem RMySQL und DBI Paket verknüpft ist, oder über das RODBC oder RJDBC Paket. Ich bin nicht 100% sicher, ob sie alle Unterstützung Blobs, aber schlimmsten Fall Sie die ASCII-Darstellung und legen Sie sie in einem Textfeld verwenden können.

Der Trick ist, mit der Funktion serialize()

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

Jetzt können Sie speichern oder in einer Datenbank abrufen obj. Es ist eigentlich nicht mehr als ein Vektor von ascii (oder Binär-Codes). ascii = F gibt Ihnen eine binäre Darstellung. Nach dem Abrufen es, Sie verwenden:

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

Coefficients:
(Intercept)            x  
      4.033        4.992  

Edit: in Bezug auf den PMML, gibt es ein pmml Paket auf CRAN. Vielleicht, dass man bekommt man irgendwo?

Andere Tipps

kann R serialisiert und deserialize jeder Objekt, das ist, wie mein verdauen Paket erstellt so genannte ‚Hash-Digests‘ durch eine Hash-Funktion über das serialisierte Objekt ausgeführt wird.

Wenn Sie also das serialisierte Objekt haben (die character serialisiert werden kann), sollte sie. Jede relationale Datenbank wird dies unterstützen, ebenso wie die NoSQL-Schlüssel / Wert-Geschäfte -. Und für beide Backend könnte man sogar verwendet die ‚Hash-Digest‘ als Schlüssel oder eine andere Meta-Informationen

Weitere Alternativen sind zum Beispiel RProtoBuf die auch serialize und de-serialize sehr effizient (aber Sie würden die .proto Dateien schreiben müssen zuerst).

Beachten Sie, dass eine .rdata Dateiobjekte viele R enthalten können, so müssen Sie entscheiden, wie er damit umgehen. Wenn Sie die .rdata Datei anhängen können Sie die Objekte in es mit ls () mit einem Argument pos bekommen:

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

, dann können Sie eine Schleife über sie, get (), um sie mit Namen aus der Position und serialisiert sie auf eine Liste (p ist meine Liste Index)

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

Sie werden nun die Elemente s zu Ihrer DB spritzen müssen, wahrscheinlich in einer Tabelle von Namen (eine Art von Zeichen) und Wert (die serialisierten Daten, BLOB oder varchar I guess).

Wie andere erwähnt haben, ja können Sie die Ausgänge von Modellen als Text in Ihrer Datenbank speichern. Ich bin nicht davon überzeugt, dass das wll obwohl Sie sehr nützlich sein.

Wenn Sie in der Lage sein wollen, dass diese Modelle zu einem späteren Zeitpunkt neu zu erstellen, müssen Sie den Eingabedatensatz und den Code speichern, die die Modelle erstellt, anstatt die Ausgabe.

Natürlich könnten Sie die Modellausgabe speichern, wie auch, in welchem ??Fall Sie das Format in der Datenbank zu denken. Wenn Sie in der Lage sein wollen, dass sie bestimmte Modellergebnisse und Filter oder um zu finden, dann wird es viel einfacher, wenn man sie in die Datenbank mit etwas Struktur hinzufügen (und einige Metadaten).

Zum Beispiel könnten Sie alle Modelle abzurufen, wo es eine signifikante geschlechtsspezifische Reaktion war. In diesem Fall müssen Sie diese Informationen als separates Feld in der Datenbank hinzugefügt werden, anstatt durch die Stücke von ascii suchen zu müssen. Hinzufügen weitere Informationen wie das Modell Schöpfer und Datum der Erstellung werden Ihnen auch hilft später.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top