vectores - fcupltorgo/ensino/fep/acetatos/vectores.pdf · • todos os vectores em r têm ......

24
Luís Torgo, 2002 FEP, UP Vectores Um vector é um tipo de objecto usado para armazenar um conjunto de dados de um determinado tipo (ex. números), que estejam relacionados Ex.: as taxas de juro dos países da UE Os elementos contidos num vector podem ser acedidos individualmente. Todos os vectores em R têm um modo e um tamanho. O modo determina o tipo de valores guardado no vector. Podemos ter vectores com modo character, logical, numeric e complex. Ou seja, podemos ter vectores para armazenar conjuntos de caracteres, valores lógicos (F ou T ou FALSE ou TRUE), números, e números complexos. O tamanho de um vector é o número de elementos que ele contém, e pode ser obtido com a função length() aplicada ao vector.

Upload: ngodieu

Post on 20-Jan-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Vectores

• Um vector é um tipo de objecto usado para armazenar um conjunto de dados de um determinado tipo (ex. números), que estejam relacionados – Ex.: as taxas de juro dos países da UE

• Os elementos contidos num vector podem ser acedidos individualmente.

• Todos os vectores em R têm um modo e um tamanho.

• O modo determina o tipo de valores guardado no vector. – Podemos ter vectores com modo character, logical, numeric e complex.

– Ou seja, podemos ter vectores para armazenar conjuntos de caracteres, valores lógicos (F ou T ou FALSE ou TRUE), números, e números complexos.

• O tamanho de um vector é o número de elementos que ele contém, e pode ser obtido com a função length() aplicada ao vector.

Page 2: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Criar vectores

• Para criar um vector usamos a função c(), separando os elementos do vector por vírgulas.

> pr eços <- c( 4, 7, 23. 5, 76. 2, 80)

> pr eços

[ 1] 4. 0 7. 0 23. 5 76. 2 80. 0

> l engt h( pr eços)

[ 1] 5

> mode( pr eços)

[ 1] " numer i c"

• Todos os elementos têm que ser do mesmo tipo (modo).– Caso tentemos criar um vector com elementos de tipo diferente o

R vai forçá-los a ser do mesmo tipo, alterando-os. > v <- c( 4, 7, 23. 5, 76. 2, 80, " r r t " )

> v

[ 1] " 4" " 7" " 23. 5" " 76. 2" " 80" " r r t "

Page 3: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• As strings em R são conjuntos de caracteres englobados por aspas ou plicas,

> mensagens <- c( " r r t " , ' ol a' , ' i st o e uma st r i ng' )

> mensagens

[ 1] " r r t " " ol a" " i st o e uma st r i ng"

• Todos os vectores podem ter um elemento especial que é o NA. Este valor representa um valor desconhecido. – Exemplo: se temos os lucros trimestrais de uma empresa

guardados num vector, mas desconhecemos o seu valor no terceiro trimestre, poderíamos usar a seguinte instrução para criar esse vector,

> l ucr os <- c( 234000, 245000, NA, 124500)

> l ucr os

[ 1] 234000 245000 NA 124500

Page 4: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Aceder aos elementos dos vectores

• Os elementos de um vector podem ser acedidos através de um índice. – Na sua forma mais simples um índice é um número indicando o

elemento que pretendemos aceder. Esse número é colocado entre parênteses rectos a seguir ao nome do vector,

> l ucr os[ 2]

[ 1] 245000

• Podemos alterar o conteúdo de um elemento particular de um vector,

> l ucr os[ 3] <- 45000

> l ucr os

[ 1] 234000 245000 45000 124500

> l ucr os <- c( 234000, 245000, NA, 124500)

> l ucr os

[ 1] 234000 245000 NA 124500

Page 5: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Podemos criar vectores vazios usando a função vector(), > not as. al unos <- vect or ( )

• O tamanho de um vector já existente pode ser alterado atribuindo mais elementos a índices até agora inexistentes,

> not as. al unos[ 3] <- 15. 4

> not as. al unos

[ 1] NA NA 15. 4

– Os dois primeiros elementos do vector notas.alunos, que anteriormente era um vector vazio, ficaram com o valor NA ao colocarmos o valor 45 no terceiro elemento.

• Para diminuirmos o tamanho de um vector podemos usar a instruçãode atribuição. Por exemplo,

> v <- c( 45, 243, 78, 343, 445, 645, 2, 44, 56, 77)

> v

[ 1] 45 243 78 343 445 645 2 44 56 77

> v <- c( v[ 5] , v[ 7] )

> v

[ 1] 445 2

Page 6: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Operações com vectores

• Um dos aspectos mais poderosos da linguagem R é a possibilidade de ''vectorizar'' a maioria das suas funções.– Ao aplicar uma função a um vector, obtemos como resultado um

vector de resultados.• Cada elemento é o resultado de aplicar a função a cada um dos elementos do

vector inicial.

> númer os <- c( 4, 7, 23. 5, 76. 2, 80)

> r aí zes <- sqr t ( númer os)

> r aí zes

[ 1] 2. 000000 2. 645751 4. 847680 8. 729261 8. 944272

– Ao atribuir a raízes o resultado de aplicar a função sqrt() ao vector números, estamos de facto a criar um vector com as raízes quadradas dos números contidos em números.

Page 7: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Operações aritméticas com vectores

• Podemos aplicar os operadores aritméticos a vectores, > l oj a1 <- c( 4, 6, 87)

> l oj a2 <- c( 34, 32. 4, 12)

> l oj a1+l oj a2

[ 1] 38. 0 38. 4 99. 0

• O que acontece se tentamos realizar operações envolvendo vectores de tamanho diferente? – O R vai usar um regra de reciclagem dos valores do vector mais

curto até este atingir o tamanho do maior. Por exemplo, > v1 <- c( 4, 6, 8, 24)

> v2 <- c( 10, 2)

> v1+v2

[ 1] 14 8 18 26

– É como se o vector c(10,2) fosse de facto c(10,2,10,2).

Os elementos são somadosum a um.

Page 8: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Se os tamanhos não são múltiplos um do outro, o R imprime um aviso no écran,

> v1 <- c( 4, 6, 8, 24)

> v2 <- c( 10, 2, 4)

> v1+v2

[ 1] 14 8 12 34

War ni ng message: l onger obj ect l engt h i s not a mul t i pl e of

shor t er obj ect l engt h i n: v1 + v2

– Repare-se que um aviso não é um erro, o que quer dizer que a operação foi levada a cabo.

• Um número é de facto armazenado em R como um vector de tamanho 1. Logo, devido à regra da reciclagem, podemos fazer> pr eços <- c( 4, 6, 8, 24)

> 1. 19 * pr eços

[ 1] 4. 76 7. 14 9. 52 28. 56

– O número 1.19 (de facto o vector c(1.19)!) foi reciclado até atingir o tamanho do vector preços

– O resultado é a multiplicação dos elementos todos deste vector por 1.19.

Page 9: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Factores

• Os factores proporcionam uma forma fácil e compacta de lidar comdados categóricos (variáveis nominais).

• O R possui várias funções que tiram partido do facto de guardarmos informação categórica como factores em vez de usarmos strings.

• Suponhamos que pretendemos guardar o sexo de 10 indivíduos num vector,

> s <- c( ' f ' , ' m' , ' m' , ' m' , ' f ' , ' m' , ' f ' , ' m' , ' f ' , ' f ' )

> s

[ 1] " f " " m" " m" " m" " f " " m" " f " " m" " f " " f "

• Podemos transformar um vector de caracteres num factor da seguinte forma,

> s <- f act or ( s)

> s

[ 1] f m m m f m f m f f

Level s: f m

Page 10: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Suponhamos que temos 4 novos indivíduos cujo sexo também pretendemos armazenar num factor. – Imaginemos que todos pertencem ao sexo masculino. Se

pretendemos que o factor resultante mantenha os 2 níveis possíveis para o sexo de um indivíduo teremos que fazer,

> out r o. s <- f act or ( c( ' m' , ' m' , ' m' , ' m' ) , l evel s=c( ' f ' , ' m' ) )

> out r o. s

[ 1] m m m m

Level s: f m

– Sem o parâmetro “ levels” , o factor resultante teria um único nível (m), uma vez que este é o único valor que ocorre no vector de caracteres que estamos a transformar num factor.

Page 11: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Contagem de ocorrências em factores

• A função table() permite-nos contar o número de ocorrências de cada nível de um factor,

> t abl e( s)

s

f m

5 5

> t abl e( out r o. s)

out r o. s

f m

0 4

Page 12: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• A função table() também pode ser usada para fazer tabulaçõescruzadas de dois factores.– desde que tenham o mesmo tamanho.

• Imaginemos que temos um outro vector com a gama de idades dos indivíduos cujo sexo está armazenado em s.

• Podemos fazer uma tabulação cruzada da idade e do sexo dos 10 indivíduos, da seguinte forma,

> i dade <- f act or ( c( ' adul t o' , ' adul t o' , ' j ovem' , ' j ovem' , ' adul t o' , ' adul t o' ,

+ ' adul t o' , ' j ovem' , ' adul t o' , ' j ovem' ) )

> i dade

[ 1] adul t o adul t o j ovem j ovem adul t o adul t o adul t o j ovem adul t o j ovem

Level s: adul t o j ovem

> s

[ 1] f m m m f m f m f f

Level s: f m

> t abl e( i dade, s)

s

i dade f m

adul t o 4 2

j ovem 1 3

Prompt de continuaçãode linha

Page 13: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Sequências

• 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,

> códi gos. pr odut os <- 1: 1000

• Devemos ter algum cuidado com a precedência do operador '':'' em relação aos operadores aritméticos,

> 10: 15- 1

[ 1] 9 10 11 12 13 14

> 10: ( 15- 1)

[ 1] 10 11 12 13 14

Page 14: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• 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

> seq( f r om=1, t o=5, l engt h=4)

[ 1] 1. 000000 2. 333333 3. 666667 5. 000000 > seq( f r om=1, t o=5, l engt h=2)

[ 1] 1 5

> seq( l engt h=10, f r om=- 2, by=. 2)

[ 1] - 2. 0 - 1. 8 - 1. 6 - 1. 4 - 1. 2 - 1. 0 - 0. 8 - 0. 6 - 0. 4 - 0. 2

Page 15: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Uma outra função bastante útil para gerar sequências é a função rep()> r ep( 5, 10)

[ 1] 5 5 5 5 5 5 5 5 5 5

> r ep( ' si m' , 3)

[ 1] " s i m" " s i m" " s i m"

> r ep( 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.

> gl ( 3, 5)

[ 1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

Level s: 1 2 3

> gl ( 2, 5, l abel s=c( ' nao' , ' s i m' ) )

[ 1] nao nao nao nao nao si m si m si m si m si m

Level s: nao si m

Page 16: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Sequências aleatórias

• 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 rfunc(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 usar 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,

> r nor m( 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

> r nor m( 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

Page 17: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• 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

> r t ( 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 osquartis das distribuições.

Page 18: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Indexação de vectores• Para aceder a um elemento de um vector temos vindo a usar a sua

posição entre parênteses rectos. • O R também nos permite usar vectores dentro desses parênteses

rectos. • Esses vectores chamam-se vectores de índices.

– Existem vários tipos de vectores de índices.

• Os vectores de índices booleanos extraem de um vector os elementos correspondentes a posições verdadeiras.

> var i ações <- c( 0, - 3, 4, - 1, 45, 90, - 5)

> var i ações

[ 1] 0 - 3 4 - 1 45 90 - 5

> var i ações > 0

[ 1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE

> posi t i vos <- var i ações > 0

> var i ações[ posi t i vos]

[ 1] 4 45 90> var i ações[ var i ações > 0]

[ 1] 4 45 90

Page 19: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Tirando partido da gama de operadores lógicos disponíveis no R, podemos construir vectores de indexação lógicos mais complexos,

> var i ações[ var i ações <= - 2 | var i ações > 5]

[ 1] - 3 45 90 - 5

> var i ações[ var i ações > 40 & var i ações < 100]

[ 1] 45 90

• O R também nos permite usar um vector de números inteiros como índice. – Os números desse vector de índices correspondem aos elementos a

extrair do outro vector, > ( l et r as <- c( ' a' , ' b' , ' c ' , ' d' , ' e' , ' f ' , ' g' , ' h' , ' i ' , ' j ' ) ) [ 1] " a" " b" " c" " d" " e" " f " " g" " h" " i " " j "

> l et r as[ c( 4, 6) ]

[ 1] " d" " f "

> l et r as[ 1: 3]

[ 1] " a" " b" " c"

“OU” lógico

“E” lógico

> var i ações

[ 1] 0 - 3 4 - 1 45 90 - 5

Page 20: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Podemos ainda usar um vector com números negativos– Permite-nos indicar quais os elementos a não obter como resultado

da indexação, > l et r as[ - 1]

[ 1] " b" " c" " d" " e" " f " " g" " h" " i " " j "

> l et r as[ - c( 4, 6) ]

[ 1] " a" " b" " c" " e" " g" " h" " i " " j "

> l et r as[ - ( 1: 3) ]

[ 1] " d" " e" " f " " g" " h" " i " " j “

• Note bem a importância dos parênteses no último exemplo, devido à precedência do operador '':''– O que acontece sem os parênteses ?

Page 21: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Um vector também pode ser indexado por um vector de strings• Isto consegue-se tirando partido do facto de o R permitir dar nomes

aos elementos de um vector através na função names(). – Vectores com os elementos com nomes são por vezes preferíveis pois as suas

``posições'' são mais facilmente memorizáveis. – Suponhamos que tínhamos um vector com as taxas de inflação de 5 países

europeus. Poderíamos criar um vector com nomes da seguinte forma, > t x. i nf l <- c( 2. 5, 2, 2. 1, 2. 3, 1. 9)

> names( t x. i nf l ) <- c( ' Por t ugal ' , ' Fr ança' , ' Espanha' , ' I t ál i a' , ' Al emanha' )

> t x. i nf l

Por t ugal Fr ança Espanha I t ál i a Al emanha

2. 5 2. 0 2. 1 2. 3 1. 9

• Os elementos do vector tx.infl podem agora ser acedidos usando os seus nomes,

> t x. i nf l [ ' Por t ugal ' ]

Por t ugal

2. 5

> t x. i nf l [ c( ' Espanha' , ' Al emanha' ) ]

Espanha Al emanha

2. 1 1. 9

Page 22: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

• Os índices também podem ser vazios– Significa que todos os elementos são seleccionados.

• Por exemplo, se pretendemos preencher todas as posições de um vector com zeros podemos fazer,

x[ ] <- 0

• De notar, que isto é diferente de fazer,x <- 0

• Porquê?

Page 23: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

Algumas funções úteis sobre vectores• Estatísticas básicas> t x. i nf l <- c( 2. 5, 2, 2. 1, 2. 3, 1. 9)

> names( t x. i nf l ) <- c( ' Por t ugal ' , ' Fr ança' , ' Espanha' , ' I t ál i a' , ' Al emanha' )

> t x. i nf l

Por t ugal Fr ança Espanha I t ál i a Al emanha

2. 5 2. 0 2. 1 2. 3 1. 9

> sor t ( t x. i nf l )

Al emanha Fr ança Espanha I t ál i a Por t ugal

1. 9 2. 0 2. 1 2. 3 2. 5> max( t x. i nf l )

[ 1] 2. 5

> mi n( t x. i nf l )

[ 1] 1. 9

> whi ch. max( t x. i nf l )

[ 1] 1

> whi ch. mi n( t x. i nf l )

[ 1] 5

> t x. i nf l [ whi ch. max( t x. i nf l ) ]

Por t ugal

2. 5

> mean( t x. i nf l )

[ 1] 2. 16

> sd( t x. i nf l )

[ 1] 0. 2408319

Page 24: vectores - FCUPltorgo/Ensino/FEP/Acetatos/vectores.pdf · • Todos os vectores em R têm ... valores lógicos (F ou T ou ... pretendemos que o factor resultante mantenha os 2 níveis

Luís Torgo, 2002 FEP, UP

> summar y( t x . i nf l )

Mi n. 1st Qu. Medi an Mean 3r d Qu. Max.

1. 90 2. 00 2. 10 2. 16 2. 30 2. 50

> bar pl ot ( t x . i nf l )

> bar pl ot ( t x . i nf l , mai n=' I nf l ação na UE' , y l ab=' Taxa' , x l ab=' Paí ses' )