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 1Para 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.
| '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.000000O 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 2O 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 2Os 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 2No 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