Je suis coincé avec une simple boucle qui prend plus d'une heure à courir, et j'ai besoin d'aide pour l'accélérer.Valeur de retour de la colonne indiquée dans la même ligne
Fondamentalement, j'ai une matrice avec 31 colonnes et 400 000 lignes. Les 30 premières colonnes ont des valeurs, et la 31ème colonne a un numéro de colonne. Je dois, par ligne, récupérer la valeur dans la colonne indiquée par la 31ème colonne.
Exemple ligne: [26,354,72,5987 .., 461,3] (ce qui signifie que la valeur dans la colonne 3 est recherchée (72))
La boucle trop lente se présente comme suit:
a <- rep(0,nrow(data)) #To pre-allocate memory
for (i in 1:nrow(data)) {
a[i] <- data[i,data[i,31]]
}
Je pense que cela fonctionnerait:
a <- data[,data[,31]]
... mais il se traduit par "erreur: ne peut pas attribuer vecteur de taille 2.8 Mb".
Je crains que ce soit une question très simple, donc j'ai passé des heures à essayer de comprendre appliquer, lapply, remodeler et plus, mais de toute façon je ne peux pas avoir une emprise sur le concept de vectorisation dans R.
La matrice a en fait encore plus de colonnes qui vont aussi dans le paramètre a, c'est pourquoi je ne veux pas reconstruire la matrice, ou la diviser.
Votre soutien est grandement apprécié!
Chris
Êtes-vous sûr qu'il y a suffisamment de RAM libre? – mbq
s'appliquent et les amis n'ont rien à voir avec la vectorisation. – Shane
Votre exemple créerait une autre matrice, de la même taille que celle d'origine.On dirait que vous manquez de RAM dans votre espace de travail - un vecteur numérique de longueur 400000 prend 3.1 Mb, et la matrice devrait prendre 94.6 Mb. – James