54 votes

Comment générer une liste avec un pas d'incrémentation spécifié ?

Comment puis-je générer un vecteur avec un pas d'incrémentation spécifié (par exemple 2) ? Par exemple, comment puis-je produire ce qui suit

0  2  4  6  8  10

88voto

John Points 11714

Exécuter seq(1, 10, 1) fait ce qui suit 1:10 fait. Vous pouvez modifier le dernier paramètre de seq c'est-à-dire by pour être l'étape de la taille que vous souhaitez.

> #a vector of even numbers
> seq(0, 10, by=2) # Explicitly specifying "by" only to increase readability 
> [1]  0  2  4  6  8 10

7voto

Travis Nelson Points 945

Vous pouvez utiliser la multiplication scalaire pour modifier chaque élément de votre vecteur.

> r <- 0:10 
> r <- r * 2
> r 
 [1]  0  2  4  6  8 10 12 14 16 18 20

ou

> r <- 0:10 * 2 
> r 
 [1]  0  2  4  6  8 10 12 14 16 18 20

5voto

Ben Bolker Points 50041

L'exemple suivant montre des points de repère pour quelques alternatives.

library(rbenchmark) # Note spelling: "rbenchmark", not "benchmark"
benchmark(seq(0,1e6,by=2),(0:5e5)*2,seq.int(0L,1e6L,by=2L))
##                     test replications elapsed  relative user.self sys.self
## 2          (0:5e+05) * 2          100   0.587  3.536145     0.344    0.244
## 1     seq(0, 1e6, by = 2)         100   2.760 16.626506     1.832    0.900
## 3 seq.int(0, 1e6, by = 2)         100   0.166  1.000000     0.056    0.096

Dans ce cas, seq.int est la méthode la plus rapide et seq le plus lent. Si la performance de cette étape n'est pas si importante (il faut toujours moins de 3 secondes pour générer une séquence de 500 000 valeurs), je peux toujours utiliser la méthode suivante seq comme la solution la plus lisible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X