Trabalhando com Vetores em R

Vetores em R

Nesta lição vamos introduzir um assunto de muita importância em linguagem R: os Vetores.

Os vetores são uma das características mais importantes em R, uma estrutura de dados amplamente empregada em inúmeros cenários diferentes.

Bem, mas o que é exatamente um vetor?

Um vetor é, basicamente, um conjunto unidimensional de valores, todos do mesmo tipo, que funciona como uma espécie de “variável multivalorada”. Em R, os vetores podem ter quantos valores (elementos) forem necessários – mesmo um único valor é um vetor contendo um elemento.

A figura a seguir ilustra um vetor de nome “Vetor1“, com cinco elementos de índices de 1 a 5, preenchido com valores numéricos inteiros:

Um vetor em linguagem R

Vetor de 5 posições (elementos) preenchido com valores numéricos.

Como criar um vetor em R

Podemos criar vetores em R de várias formas. Por exemplo, é possível criar um vetor de números inteiros simplesmente usando o operador : (“até”). Suponha que você queira criar um vetor que contenha os números de 2 a 8, e batizá-lo como “vetor”. Para isso, basta executar o comando a seguir:

vetor <- 2:8

Isso criará um vetor com as posições de 1 até 7 preenchidas com os valores numéricos inteiros de 2 até 8. Para visualizar seu conteúdo, basta usar uma função como print():

print(vetor)
[1] 2 3 4 5 6 7 8

O número 1 entre colchetes no início da linha ([1]) indica que esta linha inicia com a exibição do elemento 1 do vetor (primeira posição). 

Note que o vetor criado possui os números de 2 até 8, em intervalos de valor 1. Esse intervalo é o padrão, mas podemos especificar um intervalo diferente para os números. Para tal, fazemos uso da função seq(). Suponha um conjunto de números de 2 até 18, porém com um intervalo de valor 2 entre eles. Criamos esse vetor assim:

vetor <- seq(from = 2, to = 18, by = 2)
print(vetor)
[1] 2 4 6 8 10 12 14 16 18

A função seq() requer por padrão três parâmetros: 

  • from = valor inicial
  • to = valo final
  • by = incremento

Alternativamente, podemos fornecer esses parâmetros (em ordem) sem a necessidade de especificá-los por nome:

vetor <- seq(2,18,2)
print(vetor)
[1] 2 4 6 8 10 12 14 16 18

Também é possível especificar o comprimento da sequência de valores a ser criada, usando o argumento opcional length.out. Neste caso, o tamanho do intervalo entre os valores será calculado automaticamente. Por exemplo, suponha que precisamos de uma sequência que contenha 10 valores, entre os números 2 e 8:

vetor <- seq(from = 2, to = 8, length.out = 10)
print(vetor)
[1] 2.00 2.66 3.33 4.00 4.66 5.33 6.00 6.66 7.33 8.00

Note que o intervalo entre os números foi calculado automaticamente, e os 10 valores foram gerados para o vetor. Neste caso é obrigatório especificar os nomes dos parâmetros passados à função.

Combinando vetores em R

É possível combinar um ou mais vetores, criando assim um novo vetor em R por meio da aplicação da função combine, representada por c( ). Com ela, podemos combinar vetores de qualquer tamanho, seja contendo um único elemento ou contendo milhares deles.

Vejamos um exemplo.

vetor1 <- 1:5
vetor2 <- 12:16
vetor3 <- c(vetor1, vetor2)
print(vetor3)
[1] 1 2 3 4 5 12 13 14 15 16

Note que a ordem dos valores é mantida – vetor1 foi passado como parâmetro antes de vetor2 à função, e por isso seus valores são mostrados antes também.

Também usamos a função c() para criar vetores que contenham valores especificados, como por exemplo:

vetor1 <- c("Fábio", "Maria", "Ana", "Bruce")

Repetindo vetores em R

Também podemos repetir os valores presentes em um vetor diversas vezes para criar um vetor de tamanho maior (ou para outro propósito qualquer), de forma simples e rápida com o emprego da função rep() – “replicate“. Podemos utilizar essa função de várias formas, passando alguns parâmetros modificadores a ela. Vejamos alguns exemplos:

1 – Repetir o vetor completo um número determinado de vezes – como por exemplo, 5 vezes:

vetor1 <- 1:5
rep(vetor1, times = 5)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
[21] 1 2 3 4 5

2 – Podemos repetir cada valor dentro do vetor com o argumento each:

vetor1 <- 1:5
rep(vetor1, each = 3)
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5

3 – Repetir cada valor um número diferente de vezes. Para isso, passamos um vetor como argumento de times, contendo o número de vezes que cada elemento deverá ser repetido em suas respectivas posições:

vetor1 <- 1:5
rep(vetor1, times = c(1,2,1,2,1))
[1] 1  2 2 3  4 4  5

Neste caso mandamos repetir o primeiro valor de vetor1 uma vez, o segundo valor duas vezes, o terceiro valor, uma vez, o quarto, duas vezes, e o quinto valor, uma vez também.

4 – Repetir os valores de um vetor um número determinado de vezes, de forma individual, até que um tamanho máximo seja alcançado (número de itens), mesmo que a última repetição fique incompleta:

vetor1 <- 1:5
rep(vetor1, length.out = 16)
[1] 1  2 3 4 5 1 2 3 4 5 1 2 3 4 5 1

Pedimos para que a função repetisse os valores de vetor um até obtermos 16 valores – note que na última repetição, somente o valor “1” foi utilizado, pois é o 16º valor.

Testando o tipo de um vetor

Podemos empregar diversas funções para verificar o tipo de dado armazenado em um vetor. São elas:

  • is.numeric – Verifica se um vetor é de algum tipo numérico
  • is.integer – Verifica se o vetor é do tipo numérico inteiro
  • is.double – Verifica se o vetor é do tipo double
  • is.complex – Verifica se o vetor é do tipo número complexo
  • is.character – Verifica se o vetor é do tipo string de caracteres
  • is.logical  – Verifica se o vetor é do tipo booleano

Sem nos esquecermos da função typeof(), que retorna o tipo do objeto armazenado.

Vejamos alguns exemplos.

vetor1 <- 1:10
vetor2 <- c(1+2i, 2+3i, 3+5i)
vetor3 <- c("Fábio", "Monica", "Ana")
is.numeric(vetor1)
[1] TRUE
is.double(vetor1)
[1] FALSE
is.character(vetor2)
[1] FALSE
is.complex(vetor2)
[1] TRUE
is.character(vetor3)
[1] TRUE

Verificando as propriedades de um vetor em R

Podemos verificar a estrutura de um vetor – ou seja, seu tipo e conteúdo – por meio da função str(). Vejamos a estrutura dos vetores criados na seção anterior:

str(vetor1)
int [1:10] 1 2 3 4 5 6 7 8 9 10
str(vetor2)
cplx [1:3] 1+2i 2+3i 3+5i
str(vetor3)
chr [1:3] "Fábio" "Monica" "Ana"

A primeira palavra retornada indica o tipo de dados do vetor (inteiro, complexo e caractere, em nosso exemplos). E os números dentro dos colchetes indicam as dimensões do vetor. Por exemplo, o vetor1 possui uma única dimensão, com os índices especificados pelos números 1:10.

Caso você queria apenas saber o tamanho de um vetor, use a função length():

length(vetor2)
[1] 3

Isso nos diz que o vetor2 possui o tamanho de 3 elementos.

Como acessar os elementos de um vetor

Para que os vetores tenham realmente utilidade é necessário que seja possível acessar seus elementos individuais, para que possam ser lidos e manipulados. A maneira mais simples de fazer isso é especificar o número da posição que queremos acessar entre colchetes. Veja um exemplo:

vetor <- c("Fábio", "Monica", "Ana", "Pedro")
print(vetor[2])
[1] "Monica"

Neste exemplo acessamos a posição de índice 2 do vetor, que nos retornou o segundo valor armazenado – no caso a string “Monica”.

Podemos acessar mais de um elemento combinando seus números de índice:

print(vetor[c(1,3)])
[1] "Fábio" "Ana"

Retornar todos os elementos exceto alguns determinados:

print(vetor[c(-1, -4)])
[1] "Monica" "Ana"

Ou ainda retornar apenas um grupo sequencial de elementos, como por exemplo os três primeiros:

print(vetor[1:3))
[1] "Fábio" "Monica" "Ana"

Alterando o conteúdo de um vetor

Podemos alterar os valores dos elementos de um vetor empregando também os colchetes e números de índice. Veja um exemplo:

vetor <- c("Fábio", "Monica", "Ana", "Pedro")
print(vetor[2])
[1] "Monica"
vetor[2] <- "Sofia"
vetor[2]
[1] "Sofia"

Neste exemplo nós alteramos o elemento da segunda posição do vetor de “Monica” para “Sofia”.

Podemos esvaziar um vetor atribuindo a ele o valor NULL:

vetor <- NULL
vetor
NULL

Note que o vetor continua existindo, apesar de não possuir nenhum elemento. Caso seja necessário destrui-lo em definitivo, desalocando o vetor da memória, use a função rm():

rm(vetor)
vetor
Error: object 'vetor' not found

Aritmética com Vetores

É possível realizar operações aritméticas com os valores contidos em um vetor. Essas operações são efetuadas membro a membro, ou seja, em um elemento por vez.

Vejamos um exemplo. Suponha um vetor de 5 números, de 1 a 5. Queremos multiplicar todos os seus elementos por 2:

vetor <- 1:5
vetor * 2
[1] 2 4 6 8 10

Outro exemplo. Suponha que também temos um outro vetor, vetor2, com os números de 20 a 24, e queremos adicionar o dois vetores:

vetor <- 1:5
vetor2 <- 20:24
vetor + vetor2
[1] 21 23 25 27 29

Veja que o primeiro elemento de vetor foi adicionado ao primeiro elemento de vetor2, e assim por diante.

O mesmo ocorrerá com as outras operações básicas – multiplicação, subtração e divisão.

Reciclagem

Se, ao efetuarmos uma operação aritmética entre dois vetores, um deles tiver tamanho diferente – ou seja, of menor – seus valores serão reciclados (repetidos) durante as operações. Veja o exemplo:

vetor <- 1:5
vetor2 <- 6:8
vetor * vetor2
[1] 6 14 24 24 35
Warning message:
In vetor * vetor2 :
longer object length is not a multiple of shorter object length

Note que foi emitida uma mensagem de aviso, dizendo que o comprimento do vetor maior não é um múltiplo do menor. Os valores obtidos são interpretados assim:

1 x 6 = 6
2 x 7 = 14
3 x 8 = 24
4 x 6 = 24 // Aqui começa a reciclagem de valores do vetor2.
5 x 7 = 35

 

Sobre Fábio dos Reis (1329 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*