Coucou,
je viens de faire ça, ça sert à calculer des listes de valeurs de fonctions
récursives. Par exemple, pour calculer les premiers termes de la suite de Fibonacci :
OK ? FUN est la fonction à appliquer, n est le nombre d'éléments à lui passer (ordre de récurrence de la suite), times est le nombre de fois où on doit le faire, et X est le vecteur avec lequel on démarre (de longueur >= n)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > recurse(X = c(1,1), FUN = sum, n = 2, times = 40) [1] 1 1 2 3 5 8 13 [8] 21 34 55 89 144 233 377 [15] 610 987 1597 2584 4181 6765 10946 [22] 17711 28657 46368 75025 121393 196418 317811 [29] 514229 832040 1346269 2178309 3524578 5702887 9227465 [36] 14930352 24157817 39088169 63245986 102334155 165580141 267914296
Ma question est la suivante : je suis très surpris qu'un truc pareil n'existe pas dans R ; j'ai exploré toutes les variantes de apply (lapply, rapply, mapply, etc) et je n’ai rien trouvé. Quelqu'un a une idée ?
À part ça, si vous voyez une amélioration à suggérer à ce code, allez-y...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 recurse <- function(X, FUN, n, times) { l <- length(X); if(n > l) { stop("Pas assez de valeurs dans X pour démarrer."); } args <- X[(l-n+1):l]; for(i in 1:times) { nxt <- FUN(args); X <- c(X,nxt) args <- c( args[2:n], nxt); } return(X); }
Partager