2010-07-16 8 views
11

Estoy usando R para ejecutar simulaciones usando datos de series temporales. He estado usando matrices para almacenar datos, pero necesito una solución que requiera menos memoria para almacenar datos en pasos intermedios a fin de documentar el proceso. No soy programador, así que estoy buscando algo relativamente fácil de configurar en múltiples plataformas si es posible (Windows, Mac, Linux). También necesito poder llamar directamente a la base de datos desde R, ya que ahora no es posible aprender otro idioma. Idealmente, me gustaría poder leer y escribir con frecuencia en la base de datos de una manera similar a una matriz, aunque no sé si eso es realista. Con mucho gusto sacrificaré la velocidad para facilitar el uso, pero estoy dispuesto a trabajar para aprender soluciones de código abierto. Cualquier sugerencia sera apreciada.Recomendaciones para la base de datos con R

Respuesta

3

que también tienen que ser capaces de directamente llamada de la base de datos de R

Sugiero la creación de MySQL con interfaz RMySQL.

Una vez que la conexión de base de datos está abierta, se puede consultar la base de datos y obtener los datos en R, ejemplo:

# Run an SQL statement by creating first a resultSet object 
rs <- dbSendQuery(con, statement = paste(
         "SELECT w.laser_id, w.wavelength, p.cut_off", 
         "FROM WL w, PURGE P", 
         "WHERE w.laser_id = p.laser_id", 
         "SORT BY w.laser_id") 
# we now fetch records from the resultSet into a data.frame 
data <- fetch(rs, n = -1) # extract all rows 

RMySQL: R interfaz a la base de datos MySQL

Base de Datos interfaz y controlador MySQL para R. Esta versión cumple con la definición de interfaz de base de datos como implementada en el paquete DBI 0.2-2.

base de datos MySQL:

disponible para todas las plataformas que citadas en la pregunta, y más, descargar here.

+2

Para un usuario único, RSQLite es más fácil de instalar y bastante rápido. –

+0

Gracias por los ejemplos de código Bakkal. Esto se usará para un solo usuario. ¿Hay alguna ventaja al usar MySQL en lugar de SQLite para esta aplicación? – ProbablePattern

+0

Puede usar la base de datos más simple para la tarea actual, y luego pasar a una más completa más adelante si falta una característica útil :) – bakkal

14

comentarios rápidos:

  • R es bueno en esto, como lengua para la programación con los datos, hay un montón de interfaces
  • Hay toda una manual dedicada a la importación/exportación de datos, y tiene un section on relational databases, así que comienza allí.
  • R tiene el paquete ampliamente usado DBI que proporciona una interfaz unificada para muchos backends, entre ellos SQLite, MySQL, PostgreSQL, Oracle, ... Use eso, tal vez con RSQLite para que algo funcione rápidamente. Todavía puedes cambiar de backends después. También hay RODBC, pero encuentro que ODBC es tedioso para trabajar
  • R también tiene una variante especializada en el paquete TSdbi de Paul Gilbert, que trae la abstracción de DBI a las bases de datos de timeseries. También es compatible con múltiples backends.
  • El paquete data.table se escribió para esto y es muy rápido en la indexación y la agregación.
+0

Gracias por los recursos. Hasta ahora, SQLite parece ser el más apropiado para mi nivel de habilidad. – ProbablePattern

+0

Hmm, parece que DBI murió en 2009. ¿Algo más nuevo? –

+0

@SteveBennett: No, [DBI] (http://cran.r-project.org/web/packages/DBI/index.html) está activo y actualizado, pero _no se ha corregido desde 2009_, lo cual es diferente. Y DBI es solo una interfaz cuando escribí. –

1

¿Realmente necesita una solución de base de datos para su propósito? Usted dice que quiere una "solución para almacenar datos en pasos intermedios". ¿Qué tal si guarda la matriz de datos en el disco en los puntos de tiempo requeridos?

Editar: para que sea posible recuperar la información, puede incrustar metainformación, p. Ej. índice de prueba y/o marca de tiempo, en el nombre del archivo. Luego, más tarde, puede ubicar y cargar el archivo con el nombre de archivo correcto.

+0

Soy relativamente nuevo en R pero parece que esto generaría varios cientos de archivos y dificultaría la auditoría cuando terminé. Cada ejecución de la simulación requiere la creación de algunas matrices tridimensionales y solo puedo ejecutar unas 5.000 simulaciones a la vez. Mi objetivo actual es hacer 50,000 carreras. Si hay una mejor manera de almacenar matrices tridimensionales en el disco y leer sus resultados más tarde de una manera sistemática, ciertamente apreciaría la guía. – ProbablePattern

1

También puede consultar el paquete ff.

Cuestiones relacionadas