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 :

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
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)...

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);
}