7.4 Sequências

Vimos nas seções anteriores que é muito simples criar sequências de números inteiros com o operador :. Nesta seção veremos outras formas de gerar sequências, como uma sequência de números reais e sequências de números repetidos.

7.4.1 Sequências de números inteiros

Os dois pontos (:) são uma maneira muito fácil de gerar uma sequência de números igualmente espaçados por 1. Você especifica um número inicial e um número final e o R produzirá todos os números inteiros entre eles, incluindo os dois números. Isso funciona mesmo para números negativos ou para valores decrescentes.

(ddm <- 1:31)
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#> [26] 26 27 28 29 30 31
typeof(ddm)
#> [1] "integer"
# sequencia de inteiros decrescente
(si_dec <- 10:-10)
#>  [1]  10   9   8   7   6   5   4   3   2   1   0  -1  -2  -3  -4  -5  -6  -7  -8
#> [20]  -9 -10
typeof(si_dec)
#> [1] "integer"

7.4.2 Sequências de números reais

A função seq()pode ser usada para gerar sequências tanto de números reais como inteiros.

No código abaixo são geradas uma sequência crescente e uma decrescente, ambas igualmente espaçadas por 3.

seq(from = 1, to = 10, by = 3)
#> [1]  1  4  7 10
seq(from = 10, to = 1, by = -3)
#> [1] 10  7  4  1

Para sequências decrescentes o argumento by ("por") deve ser negativo.

A saída da seq() vai sempre incluir o n° inicial (passado no argumento from - "de"), mas nem sempre incluirá o n° final (passado no argumento to - "até"). Se sua sequência está aumentando por um argumento by que é par (ímpar) e o argumento to também é par (ímpar), não incluirá o valor do argumento to no resultado (Tabela 7.2). Quando to e by diferem o valor de to fará parte da sequência de saída.

Tabela 7.2: Sequências com argumentos ímpares e pares.
'from' 'to' 'to' é par? 'by' 'by' é par? sequência resultado inclui 'to'
1 10 TRUE 2 TRUE 1, 3, 5, 7, 9 FALSE
1 10 TRUE 3 FALSE 1, 4, 7, 10 TRUE
1 11 FALSE 2 TRUE 1, 3, 5, 7, 9, 11 TRUE
1 11 FALSE 3 FALSE 1, 4, 7, 10 FALSE

Ao invés de usar o argumento by, podemos especificar um valor para o argumento length.out ("tamanho de saída") para produzir um vetor com tantos números, igualmente espaçados, entre os valores from e to.

seq(from = 1, to = 10, length.out = 20)
#>  [1]  1.000000  1.473684  1.947368  2.421053  2.894737  3.368421  3.842105
#>  [8]  4.315789  4.789474  5.263158  5.736842  6.210526  6.684211  7.157895
#> [15]  7.631579  8.105263  8.578947  9.052632  9.526316 10.000000

O length.out = 20 no código acima permite gerar 20 números igualmente espaçados entre 1 e 10.

7.4.3 Repetições

Algumas vezes precisamos repetir certos valores, o que pode ser feito com a função rep(). O argumento times especifica o número de vezes para repetir o x.

rep(x = 1:2, times = 4)
#> [1] 1 2 1 2 1 2 1 2

O argumento each especifica o número de vezes para repetir cada elemento de x.

rep(x = 1:2, each = 3)
#> [1] 1 1 1 2 2 2

Os argumentos podem ser combinados.

rep(x = 1:2, times = 4, each = 3)
#>  [1] 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 2

No caso acima, x primeiro foi repetido 4 vezes e depois cada elemento foi repetido 3 vezes.

Quando argumento times é um vetor de mesmo tamanho que x, cada um de seus valores será usado para repetir tantas vezes o respectivo elemento de x.

rep(x = 1:2, times = 4:3)
#> [1] 1 1 1 1 2 2 2