bonjour,
au risque de ne pas être très constructif, je ne vois pas beaucoup de solution pour résoudre ce problème:
- alléger la procédure pour éviter de créer trop d'objet temporaire.
- éviter l'utilisation des objects data.frame et list
- acheter de la mémoire (désolé ... elle était facile celle-là :D)
- bidouiller la mémoire virtuelle (avec les risques que cela peut comporter)
- faire une dll (par exemple en C, C++ ou fortran)
si c'est pour mettre des données en forme,
il reste peut-être aussi Python,
ou awk & co (cf cygwin, MinGW) ...
"memory.limit" semble servir à forcer la limitation de mémoire.
par contre, il faut faire attention la taille (size) doit être donnée en Mb.
mais bon, je n'ai jamais utilisé cette commande .. :(
voici un p'tit exemple d'utilisation:
Code : Tout sélectionner
> memory.limit()
[1] 535543808
> round(memory.limit()/1048576.0, 2)
[1] 510.73
> memory.limit(size=600)
NULL
> mat1 <- matrix(rep(1,4*1e4),5)
> mat2 <- matrix(rep(2,4*1e4),5)
> ted <- t(mat1)%*%mat2
Erreur : impossible d'allouer un vecteur de taille 500000 Ko
De plus : Warning messages:
1: Reached total allocation of 600Mb: see help(memory.size)
2: Reached total allocation of 600Mb: see help(memory.size)
> memory.limit(size=1000)
NULL
> ted <- t(mat1)%*%mat2
> memory.limit()
[1] 1048576000
> round(memory.limit()/1048576.0, 2)
[1] 1000
en espérant avoir aider un peu,
@+++
Pierre
PS : petit test :
Code : Tout sélectionner
> memory.limit(size = 1e12)
Erreur dans memory.size(size) : ne soyez pas stupide ! Votre machine a une limite de mémoire adressable de 4 Go
ça m'a bien fait rire :D