Básico 2024 | Aula 09

Vetores

Encarte

Filosofia de publicação (Selo DC)

Apoio CEAC e UFSJ

Livro de Apoio

Usaremos Batista e Oliveira (2022):

Introdução

Podemos dizer que existem três tipos principais de vetores atômicos:

  • Numéricos (numeric):
    • Inteiro (integer);
    • Real (double);
  • Lógico (logical);
  • Caractere (character)

Existem dois tipos raros que são os complexos (complex) e brutos (raw), que falaremos no módulo seguinte.

Escalares

  • Vetor de comprimento 1;
  • Sintaxe para valores especiais: TRUE, FALSE, Inf, -Inf, NaN, NA;

Escalares

> # divisao de um numero por zero (+ infinito)
> x <- 50 / 0; x
[1] Inf
> # divisao de um numero por zero (- infinito)
> -50 / 0
[1] -Inf
> # Resultado sem número do tipo NaN
> x - x
[1] NaN

Escalares

  • os vetores numéricos do tipo double podem ser representados de forma decima (0.123), científica (1.23e5), ou hexadecimal (3E0A);
  • os vetores numéricos do tipo integer são representados pela letra L ao final do número inteiro, isto é, 1L, 1.23e5L, etc.;
  • os caracteres são representados pelas palavras, letras, números ou caracteres especiais entre aspas, isto é, "Ben", "a". Pode ser utilizado também uma aspa, 'Ben', 'a', etc.

Vetores longos

  • Funções:
    • concatenar c()
    • valores sequenciais: rep(), seq(), :
> # Criando um vetor 'double'
> vetor.num <- c(1, 2, 3, 4, 5); vetor.num; typeof(vetor.num)
[1] 1 2 3 4 5
[1] "double"

Vetores longos

  • Funções:
    • concatenar c()
    • valores sequenciais: rep(), seq(), :
> # Criando uma sequência de 1 a 5
> vetor.num3 <- 1:5; vetor.num3; typeof(vetor.num3)
[1] 1 2 3 4 5
[1] "integer"

Vetores longos

> vetor.num <- c(1, 2, 3, 4, 5); vetor.num2 <- c(1L, 2L, 3L, 4L, 5L)
> vetor.num3 <- 1:5
> ##
> vetor.num == vetor.num2
[1] TRUE TRUE TRUE TRUE TRUE
> vetor.num == vetor.num3
[1] TRUE TRUE TRUE TRUE TRUE
> vetor.num2 == vetor.num3
[1] TRUE TRUE TRUE TRUE TRUE

Vetores longos

> # Modo do objeto:
> typeof(vetor.num); typeof(vetor.num2); typeof(vetor.num3)
[1] "double"
[1] "integer"
[1] "integer"

Vetores longos

> # Memoria:
> lobstr::obj_size(vetor.num)
96 B
> lobstr::obj_size(vetor.num2)
80 B
> lobstr::obj_size(1:5)
680 B

Vetores longos

> # Tamanho de memoria dos objetos
> lobstr::obj_size(1:10)
680 B
> lobstr::obj_size(1:10000)
680 B
> lobstr::obj_size(1:1000000)
680 B

Vetores longos

> # Tamanho de memoria dos objetos
> lobstr::obj_size(c(1:10))
96 B
> lobstr::obj_size(c(1:10000))
40.05 kB
> lobstr::obj_size(c(1:1000000))
4.00 MB

Manipulando vetores

  • Vetor de comprimento zero
> v1 <- numeric(0); length(v1)
[1] 0
> v2 <- character(0); length(v2)
[1] 0
> v3 <- logical(0); length(v2)
[1] 0

Manipulando vetores

> # Vetor numerico de comprimento 0
> v1 <- numeric(0)
> v2 <- character(0)
> v3 <- logical(0)
> # Inserimos 3 elementos em v1 e depois imprimos o seu resultado
> v1[1] <- 5; v1[2] <- 3; v1[3] <- 10; v1; length(v1)
[1]  5  3 10
[1] 3

Manipulando vetores

> # Vetor numerico de comprimento 0
> v1 <- numeric(0)
> # Inserimos 3 elementos em v1 e depois imprimos o seu resultado
> v1[1] <- 5; v1[2] <- 3; v1[3] <- 10
> # Imprimindo apenas o primeiro valor
> v1[1]
[1] 5
> # Imprimindo os dois ultimos
> v1[2:3]; v1[c(2, 3)]
[1]  3 10
[1]  3 10

Aritmética e outras operações

> # Soma de dois vetores
> 2 + 3
[1] 5
> # Exceto pela sintaxe, '+' eh uma chamada de funcao
> `+`(2, 3)
[1] 5

Aritmética e outras operações

> # Subtracao de dois vetores
> 3 - 2
[1] 1
> # Exceto pela sintaxe, '-' eh uma chamada de funcao
> `-`(3, 2)
[1] 1

Aritmética e outras operações

> # Multiplicacao de dois vetores
> 3 * 2
[1] 6
> # Exceto pela sintaxe, '*' eh uma chamada de funcao
> `*`(3, 2)
[1] 6

Aritmética e outras operações

> # Divisao de dois vetores
> 3 / 2
[1] 1.5
> # Exceto pela sintaxe, '/' eh uma chamada de funcao
> `/`(3, 2)
[1] 1.5

Aritmética e outras operações

> c(4, 5, 6) + c(1, 2, 3) # Soma de vetores
[1] 5 7 9
> c(4, 5, 6) + c(1, 2, 3) # Subtracao de  vetores
[1] 5 7 9
> c(4, 5, 6) * c(1, 2, 3) # Multiplicacao dois vetores
[1]  4 10 18
> c(4, 5, 6) / c(1, 2, 3) # Divisao de dois vetores
[1] 4.0 2.5 2.0

Aritmética e outras operações

> # Soma de vetores de comprimento diferente
> 1:10 + 3:10
 [1]  4  6  8 10 12 14 16 18 12 14
> # (1+3) (2+4) (3+5) ... (8+10) (9+3) (10+4)

Aritmética e outras operações

Função (Ou operador) Finalidade
^ ou ** Expoenciação binária, isto é 2^3 ou 2 ** 3
%/% Divisão inteira
%% Restante da divisão
sum() Soma de elementos do vetor
prod() Produtório dos elementos do vetor
sqrt() Raiz quadrada dos elementos de um vetor
log() Função Logaritmo neperiano

Aritmética e outras operações

Função (Ou operador) Finalidade
exp() Função exponencial
mean() Média dos elementos de um vetor
sd() Desvio padrão dos elementos de um vetor
var() Variância dos elementos de um vetor
median() Mediana dos elementos de um vetor

Operadores lógicos

Operador Lógico Sintaxe Pergunta
< a < b a é menor que b?
> a > b a é maior que b?
== a == b a é igual b?
!= a != b a é diferente b?
>= a >= b a é maior ou igual a b
<= a <= b a é menor ou igual a b?
%in% "a" %in% c("a", "b", "c") O elemento "a" está no vetor c("a", "b", "c")?

Operadores Booleanos

Operador Booleano (ou Função) Sintaxe Pergunta
& ou && cond1 & cond2 As cond1 e cond2 são verdadeiras?
| ou || cond1 | cond2 A cond1 ou cond2 é verdadeira?
xor() xor(cond1, cond2) Apenas a cond1 ou a cond2 é verdadeiro?
! !cond1 É falso a cond1 ?
any() any(cond1, cond2, ...) Alguma das condições são verdadeiras?
all() all(cond1, cond2, ...) Todas as condições são verdadeiras?

Operadores Booleanos

> # Criando objetos
> x <- 1:3; y <- 1:3; z <- c(1, 2, 4)
> ##
> x == y; y == z; x == y & y == z
[1] TRUE TRUE TRUE
[1]  TRUE  TRUE FALSE
[1]  TRUE  TRUE FALSE

Obrigado

Sugestões, perguntas, críticas…

Referências

BATISTA, B. D. O.; OLIVEIRA, D. A. B. J. R básico. Ouro Branco, MG, Brasil: [s.n.], 2022.