Comment générer un vecteur avec une étape d'incrémentation spécifiée (par exemple 2)? Par exemple, comment puis-je produire ce qui suit
0 2 4 6 8 10
Exécuter seq(1, 10, 1)
fait ce que 1:10
Est-ce que. Vous pouvez changer le dernier paramètre de seq
, c’est-à-dire by
, pour qu’il s’agisse du pas de la taille de votre choix.
> #a vector of even numbers
> seq(0, 10, by=2) # Explicitly specifying "by" only to increase readability
> [1] 0 2 4 6 8 10
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
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
la plus lente. Si l'exécution de cette étape n'est pas si importante (il faut toujours <3 secondes pour générer une séquence de 500 000 valeurs), il est possible que j'utilise quand même seq
comme solution la plus lisible.