2011-08-30 2 views
6

Le paquetage arules dans R utilise la classe 'transactions'. Donc, afin d'utiliser la fonction apriori() j'ai besoin de convertir mes données existantes. J'ai une matrice avec 2 colonnes et environ 1,6mm lignes et essayé de convertir les données comme ceci:Big Data convertir en "transactions" à partir du paquet arules

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

où original_data est ma matrice de données. En raison de la quantité de données que j'ai utilisé la plus grande machine Amazon AWS avec 64 Go de RAM. Après un certain temps, je me

vecteur résultant dépasse la limite de longueur de vecteur dans « AnswerType »

L'utilisation de la mémoire de la machine à 60% était encore « seulement ». Est-ce une limitation basée sur R? Y a-t-il un moyen de contourner cela autrement que d'utiliser l'échantillonnage? Quand seulement en utilisant 1/4 des données la transformation a bien fonctionné. Edit: Comme indiqué, l'une des variables était un facteur au lieu du caractère. Après avoir changé la transformation a été traitée rapidement et correcte.

+0

J'ai joué avec un peu plus, et quand je réduis la quantité de données par un peu, j'obtiens l'erreur 'Erreur dans unique.default (...) longueur 547601298 est trop grande pour hashing' Apparemment, certaines fonction 'MKsetup()' dans le code système de R, dans le fichier unique.c, empêche les vecteurs de dépasser une certaine longueur. – Marco

+0

Pouvez-vous publier les résultats de 'str (original_data)'? Il serait bon de savoir s'il y a un problème dans les données. – Iterator

+0

Pouvez-vous générer un faux, mais un exemple représentatif? –

Répondre

3

Je soupçonne que votre problème se pose parce que l'une des fonctions utilise des entiers (plutôt que, disons, des flottants) pour indexer les valeurs. En tout cas, la taille n'est pas trop grande, c'est donc surprenant. Peut-être que les données ont un autre problème, comme les caractères en tant que facteurs?

En général, cependant, je recommande vraiment d'utiliser des fichiers mappés en mémoire, via bigmemory, que vous pouvez également diviser et traiter via bigsplit ou mwhich. Si le déchargement des données fonctionne pour vous, vous pouvez également utiliser une taille d'instance beaucoup plus petite et enregistrer $$. :)

+0

Vous étiez à droite, l'une des variables était un facteur au lieu d'un caractère. Je vais regarder dans le paquet 'bigmemory', merci pour les conseils – Marco

Questions connexes