Domanda

Sto lavorando su un progetto in cui ho un sacco di analisti che creano modelli statistici in R. Di solito mi forniscono con gli oggetti del modello (file .rdata) e io li automatizzare l'esecuzione di vari insiemi di dati.

Il mio problema è il seguente:

  • Posso ci utilizzare un database e salvare queste .rdata file? Eventuali suggerimenti su fare questo? (Attualmente memorizzare i file .rdata su disco e utilizzare un database per memorizzare le informazioni posizione)

  • Ho un sacco di script R da altri analisti che hanno fatto un po 'di pre-elaborazione dei dati prima di creare i modelli. Qualcuno ha esperienza con PMML per rendere questo processo ripetibile senza intervento manuale? negozi PMML il pre-processing passi, modellando passi come tag di markup, e sarebbe ripetere la stessa su un nuovo set di dati.

Grazie per i suggerimenti e feedback.

-Harsh

È stato utile?

Soluzione

Si, è possibile utilizzare ad esempio MySQL legato a R con il pacchetto RMySQL e DBI, oppure tramite il pacchetto RODBC o RJDBC. Io non sono sicuro al 100% se tutte le macchie di supporto, ma peggiore delle ipotesi si potrebbe utilizzare la rappresentazione ASCII e metterli in un campo di testo.

Il trucco sta usando la funzione serialize()

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

Ora è possibile memorizzare o recuperare obj in un database. In realtà è più di un vettore di ascii (o binari) codici. ascii = F ti dà una rappresentazione binaria. Dopo aver recuperato esso, si utilizza:

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

Coefficients:
(Intercept)            x  
      4.033        4.992  

Modifica: per quanto riguarda il PMML, c'è un pacchetto di pmml su CRAN. Forse è quello che si ottiene da qualche parte?

Altri suggerimenti

R può serializzare e deserializzare qualsiasi oggetto, che è come la mia digest pacchetto crea cosiddetti 'digest hash' eseguendo una funzione di hash sopra l'oggetto serializzato.

Quindi, una volta che hai l'oggetto serializzato (che può essere serializzato per character), memorizzarlo. Qualsiasi database relazionale sosterrà questo, così come i negozi chiave / valore NoSQL -. E sia per backend si potrebbe anche utilizzare il 'hash digerire' come chiave, o qualche altra meta-informazioni

Altre alternative sono ad esempio RProtoBuf che può anche serializzare e de-serializzare in modo molto efficiente (ma dovreste scrivere i file Proto prima).

Si noti che un file .rdata può contenere molti oggetti R, quindi è necessario decidere come affrontare questo. Se si allega il file .rdata è possibile ottenere gli oggetti in essa con ls () con un argomento pos:

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

allora si può ciclo su di loro, get () per nome dalla posizione, e li serializzare a un elenco (p è il mio indice di lista)

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

Ora dovrete a schizzare gli elementi di s al vostro DB, probabilmente in una tabella di nome (qualche tipo di caratteri) e valore (i dati serializzati, un BLOB o varchar suppongo).

Come altri hanno detto, sì, è possibile memorizzare le uscite da modelli come testo nel database. Non sono convinto che quella WLL essere molto utile a voi però.

Se si vuole essere in grado di ricreare quei modelli in un secondo momento, quindi è necessario memorizzare il set di dati in ingresso e il codice che ha creato i modelli, piuttosto che l'uscita.

Naturalmente, è possibile memorizzare l'output del modello e, nel qual caso è necessario pensare a suo formato nel database. Se si vuole essere in grado di trovare il proprio modello di risultati e filtro o ordinarli, allora sarà molto più facile se vengono aggiunti al database con qualche struttura (e alcuni metadati).

Per esempio, si potrebbe desiderare di recuperare tutti i modelli in cui vi era una significativa risposta di genere. In questo caso è necessario aggiungere che le informazioni come un campo distinto nella base di dati piuttosto che dover navigare attraverso i pezzi di ASCII. L'aggiunta di altre informazioni come il modello creatore e la data di creazione ti aiuterà anche in seguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top