tecnologías relacional para objeto motor mapeo las framework ejemplo datos análisis r orm dplyr rmysql

motor - ¿Hay un paquete para mapeo objeto-relacional en R?



orm framework (6)

(Por mapeo objeto-relacional, me refiero a lo que se describe aquí: Wikipedia: Mapeo objeto-relacional ).

Aquí es cómo podría imaginarme este trabajo en R: un tipo de "marco de datos virtual" está vinculado a una base de datos y devuelve los resultados de las consultas SQL cuando se accede. Por ejemplo, head(virtual_list) realmente devolvería los resultados de (select * from mapped_table limit 5) en la base de datos asignada.

He encontrado este post por John Myles White , pero parece que no ha habido progreso en los últimos 3 años.

¿Hay un paquete de trabajo que implementa esto?

Si no,

  1. ¿Sería útil?
  2. ¿Cuál sería la mejor manera de implementarlo (S4?)?

Como usuario experimentado de R, no usaría esto. En primer lugar, este ''marco virtual'' sería lento de usar, ya que constantemente necesita sincronizar entre la memoria R y la base de datos. También requeriría el bloqueo de la tabla de la base de datos, ya que de lo contrario tiene resultados impredecibles debido a que otras ediciones suceden al mismo tiempo.

Finalmente, no creo que R sea adecuado para implementar una evaluación diferente de los objetos de promise . Al hacer myFrame$foo[ myFrame$foo > 40 ] todavía se obtendrá la columna foo completa, ya que no es posible implementar un esquema de traducción completo de R a SQL.

Por lo tanto, prefiero cargar un dataframe () de una consulta, usarlo y volver a escribirlo en la base de datos si es necesario.


El paquete muy reciente dplyr está implementando esto (entre otras características sorprendentes).

Aquí hay ilustraciones de los ejemplos de la función 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)


Hay un viejo paquete no compatible, SQLiteDF , que hace eso. Constrúyalo desde la fuente e ignore los numerosos mensajes de error.

> # 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


Junto a los diversos paquetes de controladores para consultar DBs (DBI, RODBC, RJDBC, RMySql, ...) y dplyr, también hay sqldf https://cran.r-project.org/web/packages/sqldf/

Esto importará automáticamente los marcos de datos en la base de datos y le permitirá consultar los datos a través de SQL. Al final se borra la db.


No creo que sea útil. R no es un lenguaje OOP real. La estructura de datos "central" en R es el marco de datos. No es necesario realizar asignaciones relacionales de objetos aquí. Lo que usted desea es una asignación entre las tablas de SQL y los marcos de datos, y RMySQL y RODBC proporcionan precisamente eso:

dbGetQuery para devolver los resultados de una consulta en un marco de datos y dbWriteTable para insertar datos en una tabla o realizar una actualización masiva (desde un marco de datos).


Parece que John Myles White se ha dado por vencido.

Hay un poco de una solución explicada here .