La plupart du code de mise en boucle ressemble à ceciExiste-t-il un moyen systématique de convertir le code R avec des boucles en code vectorisé?
retVal=NULL
for i {
for j {
result <- *some function of vector[i] and vector[j]*
retVal = rbind(retVal,result)
}
}
Puisque c'est si commun, est-il un moyen systématique de traduire cet idiome?
Est-ce que cela peut être étendu à la plupart des boucles?
Gotcha. Une chose généralisable que je reçois de votre réponse est que préallouer une matrice est une bonne idée lorsque vous avez deux indices sur un vecteur. Une autre idée pourrait être de traverser le vecteur original pour créer une matrice, puis d'utiliser des opérations matricielles pour obtenir une matrice de résultats. –
Oui, il existe de meilleures façons d'indexer directement la matrice (c'est-à-dire deux dim). Juste comment, disons, exponeniate tous les éléments d'une matrice. Mais l'effet de pré-allocation est déjà énorme - j'ai un exemple avec le timing dans mes cours d'introduction à l'informatique haute performance avec R. –