Podem-se gerar sequências em R de várias formas. Por exemplo, imaginemos que pretendemos criar um vector com os número de 1 a 1000. Em vez de os escrevermos todos, podemos usar,
> x <- 1:1000
o que cria um vector com os número inteiros de 1 a 1000.
Devemos ter algum cuidado com a precedência do operador ``:'', que é usado para gerar sequências, em relação aos operadores aritméticos. O exemplo seguinte ilustra os perigos que corremos,
> 10:15-1 [1] 9 10 11 12 13 14 > 10:(15-1) [1] 10 11 12 13 14
Repare o que aconteceu no primeiro exemplo. Devido ao operador ``:'' ter maior precedência do que o ``-'', o R gerou um vector com os números de 10 a 15 e depois subtraiu a esse vector o número 1. Devido à regra da reciclagem isto correspondeu a subtrair 1 a todos os elementos do vector, levando ao resultado que vemos acima. Já no segundo exemplo, usamos os parênteses para indicar ao R que o que pretendemos é um vector contendo os números desde 10 até ao resultado da operação 15-1, i.e. 14.
O operador ``:'' também pode ser usado para gerar sequências descendentes,
> 5:0 [1] 5 4 3 2 1 0
Para gerar sequências com números reais podemos usar a função seq(),
> seq(-4,1,0.5) [1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0
No exemplo acima geramos uma sequência formada pelos números a começar em -4 até 1 de 0.5 em 0.5. Esta função tem várias outras possibilidades para explicitar a sequência que pretendemos. Alguns exemplos são dados a baixo. Poderá também explorar as potencialidades de ajuda do R , digitando o comando ? seq que mostra o help relativamente à função seq. Uma outra hipótese é usar a ajuda disponível no menu HELP, sub-opção R LANGUAGE (HTML).
> seq(from=1,to=5,length=4) [1] 1.000000 2.333333 3.666667 5.000000 > seq(from=1,to=5,length=2) [1] 1 5 > seq(length=10,from=-2,by=.2) [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2
Repare que existe uma diferença súbtil na forma como usamos as função seq nos exemplos acima. De facto, em vez de indicarmos os valores dos argumentos da função (como por exemplo em seq(-4,1,0.5), indicamos o nome dos argumentos seguido de um sinal igual e o valor com o qual pretendemos chamar a função. As duas formas são equivalentes, no entanto a chamada por nome tem vantagens de legibilidade e também quando a função tem muitos argumentos permite-nos desrespeitar a sua ordem, ou seja, relativamente aos exemplos anteriores obteriamos o mesmo resultado com seq(length=4,from=1,to=5).
Uma outra função bastante útil para gerar sequências é a função rep,
> rep(5,10) [1] 5 5 5 5 5 5 5 5 5 5 > rep('sim',3) [1] "sim" "sim" "sim" > rep(1:3,2) [1] 1 2 3 1 2 3
A função gl pode ser usada para gerar sequências envolvendo factores. A sintaxe desta função é gl(k,n), em que k é o número de níveis do factor e n o número de repetições de cada nível. Vejamos dois exemplos,
> gl(3,5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2,5,labels=c('nao','sim')) [1] nao nao nao nao nao sim sim sim sim sim Levels: nao sim
Finalmente, o R tem uma série de funções para gerar sequências aleatórias de acordo com uma série de funções de distribuição de probabilidade. Essas funções têm a forma genérica r
func(n, par1, par2, ...)
, em que n
é o número de dados a gerar, e par1, par2, ...
são valores de alguns parâmetros que a função específica a ser usada possa precisar. Por exemplo, se pretendemos 10 números gerados aleatoriamente de acordo com uma distribuição normal de média 0 e desvio padrão unitário, podemos fazer,
> rnorm(10) [1] -0.306202028 0.335295844 1.199523068 2.034668704 0.273439339 [6] -0.001529852 1.351941008 1.643033230 -0.927847816 -0.163297158
Se preferirmos 10 números provenientes de uma distribuição normal com média 10 e desvio padrão 3, faríamos
> rnorm(10,mean=10,sd=3) [1] 7.491544 12.360160 12.879259 5.307659 11.103252 18.431678 9.554603 [8] 9.590276 7.133595 5.498858
De igual modo para obter 5 números obtidos de forma aleatória de uma distribuição t de Student com 10 graus de liberdade, fazemos
> rt(5,df=10) [1] -0.46608438 -0.44270650 -0.03921861 0.18618004 2.23085412
O R tem muitas mais funções para outras distribuições de probabilidade, bem como funções semelhantes para obter a densidade de probabilidade, as densidades acumuladas e os quartis das distribuições. No entanto, a exploração exaustiva destas funções sai fora do âmbito desta cadeira.