2010-06-15 4 views
10

Je voudrais savoir s'il y a une implémentation de la fonction foldLeft (et foldRight?) Dans R.La fonction FoldLeft est-elle disponible dans R?

Le langage est censé être "plutôt" orienté fonctionnel et donc je pense qu'il devrait y avoir quelque chose comme ça, mais je ne pouvais pas le trouver dans la documentation.

Pour moi, la fonction foldLeft applique sur une liste et a la signature suivante:

foldLeft[B](z : B)(f : (B, A) => B) : B 

Il est censé le résultat suivant:

f(... (f(f(z, a0), a1) ...), an) if the list is [a0, a1, ..., an]. 

(j'utilise la définition du Scala List API

Est-ce que quelqu'un sait si une telle fonction existe dans R?

Répondre

12

? Réduire. Utilisation Réduire (f, x, init, droite = FALSE, accumulez = FALSE)

+0

arf. Je savais que je l'avais vu quelque part! Savez-vous s'il existe un paquet dédié à la gestion des listes avec des fonctions optimales? ou sont-ils tous déjà implémentés dans le paquet de base et je ne les ai pas trouvés? – SRKX

1

Si vous voulez un vecteur de résultats, cela fonctionne:

foldl = function(f, v, x) {w = v; for (i in 1 : length(v)) { x = w[[i]] = f(x, v[[i]]) }; w } 

Maintenant, vous pouvez redéfinir cumsum comme

cumsum(v) = foldl(function(x,y) { x+y }, v, 0) 

Pour l'améliorer, vous devez gérer les valeurs manquantes comme Reduce.

Questions connexes