Challenge #1 - Corrigé

Je vous ai demandé de créer un petit script capable de reproduire ce que fait la fonction diff pour un vecteur x.

En d’autres termes, avec length(x) = n, vous deviez créer un vecteur dx de longueur n-1 tel que, pour tout i ∈ {1, 2, …, n-1} :

dx[i] <- x[i+1] – x[i]

Typiquement, avec :

x <- 1:5

Vous vouliez faire :

> x[2:5] - x[1:4]
[1] 1 1 1 1

Ce qui est bien équivalent à :

> diff(x)
[1] 1 1 1 1

Vous pouviez procéder comme ceci :

n <- length(x)
dx <- x[2:n] - x[1:(n-1)]

Ou, en une ligne :

dx <- x[2:length(x)] - x[1:(length(x)-1)]

Une autre manière de faire étant :

dx <- tail(x, -1L) - head(x, -1L)

Ou encore (suggestion de Guillaume ci-dessous) :

dx <- x[-1] - x[-length(x)]

Si vous n’y êtes pas parvenu, c’est sans doute que vous n’êtes pas encore mûr pour la suite. Je vous suggère de trouver un moment de calme pour revoir la première partie tranquillement avant de poursuivre.

2 commentaires:

  1. Bonjour,

    Lecteur assidu du blog ordre-spontané, vous m'avez convaincu de me lancer.

    Je pense arriver au même résultat avec dx <- x[-1] - x[-length(x)]

    Merci vivement pour vos contributions

    RépondreSupprimer
    Réponses
    1. Bien vu !
      J'avais oublié les indices négatif ;)

      Supprimer