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.
'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