Je voudrais créer un vecteur dans lequel chaque élément est l' i+6th
élément d'un autre vecteur.
Par exemple, dans un vecteur de longueur 120, je veux créer un autre vecteur de longueur 20 dans lequel chaque élément est la valeur i, i+6, i+12, i+18...
du vecteur initial, c'est-à-dire que je veux extraire chaque 6ème élément de l'original.
seq.int
est plus rapide dans les microbenchmarks, mais je soupçonne que toute augmentation des performances dans un programme réel serait éclipsée par le temps d'exécution des autres parties.a = 1:120; b = [::6]
. Python ne peut pas faire le premier, R pas le second.Une autre astuce pour obtenir des pièces séquentielles (au-delà de la solution seq déjà mentionnée) consiste à utiliser un vecteur logique court et à utiliser le recyclage vectoriel:
la source
seq
il faut pouvoir faire appellength
au vecteur.letters[letters < 'm'][c(TRUE, FALSE, FALSE)]
Je pense que vous demandez deux choses qui ne sont pas forcément les mêmes
Vous pouvez le faire en indexant une séquence:
Un moyen simple de le faire est de compléter un facteur logique par des FAUX jusqu'à ce que
i+6
:la source
foo[1:(i+6)!=(i+6)]
c'est-à - dire sortie toutes les valeurs sauf la sixième.Pour sélectionner chaque nième élément à partir de n'importe quelle position de départ dans le vecteur
la source