Pregunta

Estoy trabajando en un proyecto en el que tengo una gran cantidad de analistas de la creación de modelos estadísticos en R. Por lo general me proporcione los objetos del modelo (archivos .rdata) y automatizar la ejecución de ellos para diferentes conjuntos de datos.

Mi problema es:

  • ¿Puedo utilizar una base de datos y guardar estos archivos de .RData allí? ¿Alguna pista sobre cómo hacer esto? (Actualmente almaceno los archivos en el disco .rdata y utilizar una base de datos para almacenar información de ubicación)

  • Tengo un montón de guiones R de otros analistas que han realizado algunas pre-tratamiento de los datos antes de que se crean los modelos. ¿Alguien tiene experiencia en el uso de PMML para hacer de este proceso repetible y sin intervención manual? tiendas de PMML el pre-procesamiento de los pasos, el modelado de pasos como etiquetas de marcado, y se repetiría el mismo en un nuevo conjunto de datos.

Gracias por las sugerencias y retroalimentación.

-Harsh

¿Fue útil?

Solución

Sí, esto es posible usando, por ejemplo MySQL ligado a R con el paquete RMySQL y DBI, o mediante el paquete RODBC o RJDBC. No estoy 100% seguro de si todas las manchas de apoyo, pero peor de los casos se puede utilizar la representación ASCII y ponerlos en un campo de texto.

El truco está utilizando la función de serialize()

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

Ahora se puede almacenar o recuperar obj en una base de datos. En realidad no es más que un vector de códigos ASCII (o binarios). ascii = F le da una representación binaria. Después de recuperar él, que utilice:

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

Coefficients:
(Intercept)            x  
      4.033        4.992  

Edit: en cuanto a la PMML, hay un paquete pmml en CRAN. Tal vez que uno te lleva a alguna parte?

Otros consejos

R puede serializar y deserializar cualquier objeto, que es como mi digest paquete crea los llamados '' compendios de hash mediante la ejecución de una función hash sobre el objeto serializado.

Así que una vez que tenga el objeto serializado (que puede ser serializado a character), almacenarlo. Cualquier base de datos relacional apoyará este, al igual que las tiendas de clave / valor NoSQL -. Y para cualquiera backend que podría incluso utilizar el 'hash de digerir' como una clave, o alguna otra meta-información

Otras alternativas son, por ejemplo RProtoBuf el cual también puede serializar y deserializar manera muy eficiente (pero que tendría que escribir los archivos .proto primero).

Tenga en cuenta que un archivo .RData puede contener muchos objetos R, por lo que necesita para decidir cómo lidiar con eso. Si adjunta el archivo .RData puede obtener los objetos en él con ls () con un argumento pos:

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

A continuación, se puede iterar sobre ellos, get () por su nombre de la posición, y serializarlos a una lista (p es mi índice de lista)

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

Ahora usted tendrá que rociar los elementos de s de su base de datos, probablemente en una tabla de nombre (una especie de carbón de leña) y valor (los datos serializados, un BLOB o varchar supongo).

Como otros han mencionado, sí que puede almacenar los resultados de los modelos como texto en su base de datos. No estoy convencido de que ese wll ser muy útil para usted sin embargo.

Si usted quiere ser capaz de recrear los modelos en una fecha posterior, entonces usted necesita para almacenar el conjunto de datos de entrada y el código que creó los modelos, en lugar de la salida.

Por supuesto, usted podría almacenar la salida del modelo, así, en cuyo caso es necesario pensar en su formato en la base de datos. Si usted quiere ser capaz de encontrar determinados resultados del modelo y de filtro o para ellos, entonces será mucho más fácil si se agregan a la base de datos con alguna estructura (y algunos metadatos).

Por ejemplo, es posible que desee recuperar todos los modelos en los que había una respuesta significativa de género. En ese caso es necesario agregar esa información como un campo separado en la base de datos en lugar de tener que buscar a través de los trozos de ASCII. La adición de otra información como el creador modelo y la fecha de la creación también le ayudará más adelante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top