2011-08-30 14 views
6

El paquete arules en R utiliza la clase 'transacciones'. Entonces, para usar la función apriori() necesito convertir mis datos existentes. Tengo una matriz con 2 columnas y aproximadamente 1,6 mm filas y trató de convertir los datos de la siguiente manera:Big Data se convierte en "transacciones" del paquete arules

transaction_data <- as(split(original_data[,"id"], original_data[,"type"]), "transactions") 

donde original_data es mi matriz de datos. Debido a la cantidad de datos, utilicé la máquina AWS Amazon más grande con 64 gb de RAM. Después de un tiempo consigo

vector resultante excede el límite de longitud del vector en 'AnswerType'

el uso de memoria de la máquina era todavía 'sólo' en el 60%. ¿Es esta una limitación basada en R? ¿Hay alguna forma de evitar esto que no sea el muestreo? Cuando solo usamos 1/4 de los datos, la transformación funcionó bien.

Editar: Como se señaló, una de las variables fue un factor en lugar de carácter. Después de cambiar la transformación, se procesó de forma rápida y correcta.

+0

Jugué con eso un poco más, y cuando reduzco la cantidad de datos por un bit, obtengo el error 'Error en unique.default (...) longitud 547601298 es demasiado grande para hash' Aparentemente, algunas funciones 'MKsetup()' en el código del Sistema de R, en el archivo unique.c previenen que los vectores excedan una determinada longitud. – Marco

+0

¿Puedes publicar los resultados de 'str (original_data)'? Sería bueno saber si surge algún problema en los datos. – Iterator

+0

¿Se puede generar un ejemplo falso pero representativo? –

Respuesta

3

Sospecho que su problema está surgiendo porque una de las funciones usa enteros (en lugar de, por ejemplo, flotantes) para indexar valores. En cualquier caso, el tamaño no es demasiado grande, así que esto es sorprendente. Tal vez los datos tienen algún otro problema, como los personajes como factores?

En general, sin embargo, yo realmente recomiendo el uso de archivos de memoria asignada, a través de bigmemory, que también se puede dividir y procesos a través de bigsplit o mwhich. Si la descarga de los datos le funciona, entonces también puede usar un tamaño de instancia mucho más pequeño y guardar $$. :)

+0

Tenías razón, una de las variables era un factor en lugar de un char. Voy a ver el paquete 'bigmemory', gracias por el consejo – Marco

Cuestiones relacionadas