Question

Salut à tous,

J'essayais de charger un certain nombre de fichiers Affymetrix CEL à l'aide de la commande BioConductor standard (version R 2.8.1 sous Linux 64 bits, 72 Go de RAM)

abatch<-ReadAffy()

Mais je continue à recevoir ce message:

Error in read.affybatch(filenames = l$filenames, phenoData = l$phenoData,  : 
  allocMatrix: too many elements specified

Quel est le sens général de cette erreur allocMatrix? Existe-t-il un moyen d'augmenter sa taille maximale?

Merci

Était-ce utile?

La solution

Le problème est que toutes les fonctions principales utilisent des INT au lieu de LONG pour générer des objets R. Par exemple, votre message d'erreur provient de array.c dans / src / main

if ((double)nr * (double)nc > INT_MAX)
    error(_("too many elements specified"));

où nr et nc sont des entiers générés auparavant, représentant le nombre de lignes et de colonnes de votre matrice:

nr = asInteger(snr);
nc = asInteger(snc);

Donc, pour faire court, tout dans le code source devrait être changé en LONG, éventuellement non seulement dans array.c, mais dans la plupart des fonctions principales, ce qui nécessiterait une réécriture. Désolé de ne pas être plus utile, mais je suppose que c'est la seule solution. Alternativement, vous pouvez attendre R 3.x l’année prochaine, et nous espérons qu’ils mettront cela en œuvre ...

Autres conseils

Si vous essayez de travailler sur d’énormes jeux de données affymetrix, vous aurez peut-être plus de chance avec les packages de aroma.affymetrix .

De plus, le bioconducteur est un projet (particulièrement) en évolution rapide et il vous est généralement demandé de mettre à niveau vers la dernière version de R afin d'obtenir un "support" continu. (aide sur la liste de diffusion BioC). Je vois que Thrawn mentionne également un problème similaire avec R 2.10, mais vous pouvez quand même penser à mettre à jour de toute façon.

Je suis tombé sur ce fil par hasard. Non, le framework aroma. * N'est pas limité par la limitation allocMatrix () des entiers et des longs, car il ne traite pas les données en utilisant uniquement l'espace d'adressage normal - il le sous-définit également via le système de fichiers. Il ne tient jamais et ne charge jamais le jeu de données complet dans la mémoire. En gros, le système de fichiers définit la limite, pas la RAM ni l’espace adresse de votre système d’exploitation.

/ Henrik (auteur de l'arôme. *)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top