2011-08-30 11 views
6

Il pacchetto arules in R utilizza la classe "transazioni". Quindi per poter utilizzare la funzione apriori() ho bisogno di convertire i miei dati esistenti. Ho una matrice con 2 colonne e circa 1,6 millimetri righe e ho cercato di convertire i dati in questo modo:Big Data convertire in "transazioni" dal pacchetto arules

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

dove original_data è la mia matrice dei dati. A causa della quantità di dati, ho utilizzato la più grande macchina Amazon AWS con 64 GB di RAM. Dopo un po ottengo

vettore risultante supera il limite di lunghezza del vettore in 'AnswerType'

L'utilizzo della memoria della macchina era ancora 'solo' a 60%. Si tratta di una limitazione basata su R? C'è un modo per aggirare questo diverso dall'utilizzo del campionamento? Quando si utilizzava solo 1/4 dei dati, la trasformazione funzionava correttamente.

Modifica: come indicato, una delle variabili era un fattore anziché un carattere. Dopo aver cambiato la trasformazione è stata elaborata rapidamente e corretta.

+0

Ci ho giocato un po 'di più, e quando ho ridotto la quantità di dati di un po', ottengo l'errore 'Errore nella lunghezza unique.default (...) 547601298 è troppo grande per l'hashing' Apparentemente alcune funzioni 'MKsetup()' nel codice di sistema di R, nel file unique.c impediscono ai vettori di superare una certa lunghezza. – Marco

+0

Puoi pubblicare i risultati di 'str (original_data)'? Sarebbe bello sapere se c'è qualche problema nei dati. – Iterator

+0

Puoi generare un falso ma un esempio rappresentativo? –

risposta

3

Sospetto che il problema si verifichi perché una delle funzioni utilizza numeri interi (anziché, ad esempio, float) per indicizzare i valori. In ogni caso, la dimensione non è troppo grande, quindi questo è sorprendente. Forse i dati hanno qualche altro problema, come i caratteri come fattori?

In generale, tuttavia, consiglio vivamente di utilizzare file mappati in memoria, tramite bigmemory, che è possibile anche dividere ed elaborare tramite bigsplit o mwhich. Se lo scarico dei dati funziona per te, puoi anche utilizzare una dimensione dell'istanza molto più piccola e risparmiare $$. :)

+0

Hai ragione, una delle variabili era un fattore invece di un carattere. Osserverò il pacchetto 'bigmemory', grazie per il consiglio – Marco

Problemi correlati