2013-02-08 1 views
0

J'ai quelques problèmes avec la fonction vegdist. Je veux calculer une matrice de distance avec jaccard. J'ai des données binaires. Le problème est que j'ai une matrice de 138037 lignes (sites) et 89 colonnes (espèces). mon script est:vegan :: vegdist: Erreur en double (N * (N - 1)/2): la taille de vecteur spécifiée est trop grande

library("vegan") 
memory.limit(size = 100000) # it gives 1 Tera from HDD in case ram memory is over 
DF=as.data.frame(MODELOS) 
DF=na.omit(DF) 
DISTAN=vegdist(DF[,2:ncol(DF)],"jaccard") 

Ou plus reproductible:

nsites <- 138037 
nspp <- 89 
DF <- matrix(0,nrow=nsites,ncol=nspp) 
DISTAN=vegdist(DF,"jaccard") 

Presque immédiatement produit l'erreur:

Error in double(N * (N - 1)/2) : vector size specified is too large 

Je pense que cette erreur de mémoire, mais je ne pas savoir pourquoi si j'ai un PC avec 32 Go de RAM et 1 Tera de disque dur.

J'essaie aussi de faire une matrice dist avec la fonction dist de proxy package:

library(proxy) 
vector=dist(DF, method = "Jaccard") 

il commence à courir, mais quand il arrive à 10 Go de RAM, une fenêtre annonce que R a commis une erreur et il se ferme, donc il se ferme et commence une nouvelle section. Je ne sais vraiment pas ce qui se passe et moins comment résoudre cela, quelqu'un peut-il m'aider?

+2

S'il vous plaît modifier votre question et le titre à être en anglais, Tout sur ce site doit être écrit en anglais (qui comprend les messages d'erreur) – thaJeztah

+1

Y at-il une raison particulière pour laquelle cela est marqué PHP? –

+0

@ user2055974 vous pouvez définir 'Sys.setenv (LANG =" en ")' afin de reproduire le message d'erreur en anglais. Voir [ce post] (http://stackoverflow.com/questions/13575180/how-to-change-the-language-of-errors-in-r) –

Répondre

0

N <- 138037; log10(N*(N-1)/2) montre que vous essayez de calculer un objet dist avec 10^9.98 = presque 10^10 (10 milliards) d'éléments distincts. La version publiée de R ne peut gérer que des objets avec moins de 2^31-1 éléments (log10(2^31-1)=9.3), quelle que soit la quantité de mémoire disponible. Cette restriction est assouplie dans the development version of R (recherche de "LONG VECTEURS"); voir aussi Max Length for a Vector in R. La plus grande question, cependant, est: qu'est-ce que vous prévoyez réellement faire avec une matrice de distance avec 10 milliards d'éléments distincts ??? Si vous expliquez un peu plus sur le contexte de ce que vous essayez de faire, vous pourriez obtenir des réponses plus utiles (c'est-à-dire non seulement «pourquoi cela arrive-t-il?», Mais «que puis-je faire? Sans plus de contexte, tout ce que je peux dire est "essayez de passer à la version de développement de R et voyez si ça aide" (mais ça ne l'est pas, les longs vecteurs ne sont pas supportés dans tous les aspects de R et surtout pas dans ou sources FORTRAN).

Je ne sais pas pourquoi le proxy::dist donne un comportement d'erreur différent.

+0

merci de me répondre, je veux faire un cluster hiérarchique à partir de 138037 pixels de 1 lkm^2 à partir d'une zone d'étude des Andes colombiennes. J'ai des modèles de distributions pour 89 espèces donc j'ai une matrice avec les pixels dans les lignes et les espèces dans les colonnes et est plein avec l'absence (0)/présence (1) de chaque espèce pour chaque pixel. Je pense que le plus gros problème est que pour la méthode d'agglomération dans le cluster hiérarchique, j'ai besoin de la matrice de trous, donc je ne peux pas le diviser. – user2055974

+0

Aussi pour la méthode d'agglomération dans le cluster hiérarchique j'ai besoin de la matrice de trous afin qu'elle ne puisse pas être divisée J'ai fait quelques profs avec une plus petite zone et ça marche, le code MODELOS = stack (list.files (pattern = "*. Tif $") DF = as.data.frame (MODELOS) DF = na.omit (DF) DISTAN = vegdist (DF [, 2: ncol (DF)], "jaccard") E1 = hclust (DISTAN, "ward") – user2055974

+0

Je n'ai pas le temps de me pencher là-dessus, mais je suggère que vous demandiez de l'aide sur la liste de diffusion 'r-sig-ecology @ r-project.org'. votre question: il se peut qu'il existe une technique différente qui répondrait efficacement à votre question * biologique *, avec moins de fardeau de calcul (avez-vous vraiment besoin de pixels de 1 km ou l'échelle de variation semble-t-elle être plus grande?) –

Questions connexes