R: Vetores em R
Última atualização: 2026-08-26
Na aula anterior, aprendemos sobre os seis tipos de dados no R. Nesta aula, começaremos a explorar a estrutura de dados principal do R — os vetores. No Python, digitar
1, 2, 3retorna três números separados; para colocá-los em uma lista, é preciso digitar[1, 2, 3]. Mas o R é diferente — no R,1, 2, 3já é um vetor.
Os vetores no R são a base de toda a linguagem: números, cadeias de caracteres e valores booleanos são todos vetores. Nesta lição, vamos nos aprofundar no tema dos vetores, já que eles aparecerão no código de todas as lições seguintes.
1. O que você vai aprender
- O que é um vetor no R e por que ele é fundamental para o R?
- 4 maneiras de criar vetores (c() / : / seq() / rep())
- 5 maneiras de acessar elementos vetoriais (números inteiros positivos/negativos, valores booleanos, nomes)
- Aritmética vetorial (escalar + vetor, vetor + vetor)
- 9 funções agregadas comuns (soma, média, desvio padrão, etc.)
- Operações comuns de classificação, remoção de duplicatas e pesquisa
2. Uma história sobre a gestão das notas dos alunos
(1) Contexto da missão
Ivan é o professor responsável pela turma e, no final do semestre, precisa somar as notas dos 30 alunos da sua turma. Ele precisa fazer o seguinte:
- Calcular a nota média, a nota máxima e a taxa de aprovação
- Identificar os alunos que obtiveram nota 90 ou mais
- Classifique as notas da maior para a menor
- Atribuir uma nota a cada pontuação (Excelente/Bom/Aprovado/Reprovado)
Se ele usasse o Excel, teria que copiar e colar repetidamente + usar tabelas dinâmicas. Se usasse Python, teria que escrever listas, loops e compreensões de lista. Mas com o R—
(2) Solução usando R
# One-Line Code Generation 30 Student Grades (From 50 to 100 Random)
set.seed(42)
scores <- sample(50:100, 30, replace = TRUE)
# All statistics in a single line of code
mean(scores) # Average Score
max(scores) # Highest Score
sum(scores >= 60) / length(scores) # Pass Rate
scores[scores >= 90] # 90 Points or more
sort(scores, decreasing = TRUE) # Sort in descending order
10 linhas de código para resolver 5 tarefas. Essa é a beleza dos vetores do R — processar uma coluna de dados com o mínimo de código.
3. O que é um vetor?
Um vetor é a estrutura de dados mais básica no R; trata-se de uma coleção ordenada de elementos do mesmo tipo.
(1) A natureza dos vetores
graph LR
A["R Vector"] --> B["Atomicity<br/>A single digit = Length1the vector"]
A --> C["Homogeneity<br/>All elements are of the same type"]
A --> D["Orderliness<br/>Index by Location 1-based"]
A --> E["Vectorization<br/>Operations are performed automatically on a per-element basis"]
style A fill:#fff3cd
style B fill:#cce5ff
style C fill:#d4edda
style D fill:#f8d7da
style E fill:#e1d4ff
(2) Vetores em R x listas em Python
| Característica | Vetor R c(1,2,3) |
Lista em Python [1,2,3] |
|---|---|---|
| Tipo de elemento | Deve ser o mesmo | Pode ser diferente |
| Comprimento variável | ❌ Fixo | ✅ Variável (adicionar/remover) |
| Operações aritméticas | Vetorização automática | Requer compreensões de lista |
| Método de indexação | x[1] (indexação a partir de 1) |
x[0] (indexação a partir de 0) |
| Desempenho | C de baixo nível, rápido | Objetos genéricos, lento |
# Mixed Types:Mixing Numbers and Strings → Convert All to Strings
c(1, "a", TRUE)
# [1] "1" "a" "TRUE"
(3) “Scalar” não existe no R
Os vetores R têm uma propriedade oculta: um único número também é um vetor de comprimento 1.
x <- 42
length(x)
# [1] 1
# That's why R All operations are, by default, "Vectorization"
c(1, 2, 3) + 10
# [1] 11 12 13
4. 4 maneiras de criar vetores
(1) Visão geral dos métodos de criação
| Método | Sintaxe | Casos de uso |
|---|---|---|
c() |
c(1, 2, 3) |
Listar manualmente alguns números (os mais usados) |
: |
1:5 |
Sequência de números inteiros consecutivos |
seq() |
seq(1, 10, 2) |
Sequência aritmética |
rep() |
rep(1:3, times = 2) |
Elementos duplicados |
| Concatenar cadeias de caracteres |
(2) Comparação entre vários métodos
# 1. c() —— concatenate(Connect),Most Commonly Used
c(10, 20, 30, 40, 50)
# [1] 10 20 30 40 50
# 2. : —— Colon Operator,Consecutive integers
1:5
# [1] 1 2 3 4 5
5:1
# [1] 5 4 3 2 1 ← Reverse Sequence
# 3. seq() —— Arithmetic Sequence
seq(from = 1, to = 10, by = 2)
# [1] 1 3 5 7 9
seq(from = 0, to = 1, length.out = 5)
# [1] 0.00 0.25 0.50 0.75 1.00
# 4. rep() —— Duplicate Elements
rep(x = 1:3, times = 2)
# [1] 1 2 3 1 2 3 ← The entire vector is repeated 2 x
rep(x = 1:3, each = 2)
# [1] 1 1 2 2 3 3 ← Repeat each element 2 x
# 5. paste() —— String Concatenation
paste("Rank", 1:3, "th")
# [1] "Rank 1 th" "Rank 2 th" "Rank 3 th"
(3) Vetores de strings e a função paste()
# paste Default sep = " "(Space)
paste("Hello", "World")
# [1] "Hello World"
# paste0 = paste(..., sep = "") No separators
paste0("Hello", "World")
# [1] "HelloWorld"
# Vectorized Concatenation
paste(c("a", "b", "c"), 1:3, sep = "-")
# [1] "a-1" "b-2" "c-3"
paste() e paste0() é que paste0() é predefinido como sep = "", então você digita menos caracteres e fica 30% mais rápido.
5. 5 maneiras de acessar elementos vetoriais
(1) Visão geral dos métodos de acesso
| Método | Sintaxe | Significado |
|---|---|---|
| Índice inteiro positivo | x[1] |
Recupera o primeiro elemento (R começa em 1) |
| Índice inteiro negativo | x[-1] |
Excluir o primeiro |
| Vários índices | x[c(1, 3)] |
Considere o 1º e o 3º |
| Índice lógico | x[x > 5] |
Recuperar elementos maiores que 5 |
| Índice de nomes | x["Bob"] |
Por nome |
(2) ⚠️ Armadilha importante: o R usa contagem a partir de 1
x <- c("a", "b", "c", "d", "e")
x[1] # 1st element
# [1] "a"
x[0] # <- Error! Empty vector, no "a"
# numeric(0)
x[c(1, 3, 5)] # Multiple indexes
# [1] "a" "c" "e"
x[0], o que retorna um vetor vazio em vez do primeiro elemento.
(3) Índices inteiros negativos (excluindo elementos)
x <- c("a", "b", "c", "d", "e")
x[-1] # Exclusion No. 1 ea
# [1] "b" "c" "d" "e"
x[-c(1, 3)] # Exclusion No. 1 and No. 3 ea
# [1] "b" "d" "e"
(4) Índice lógico (o mais poderoso)
Este é o método de indexação mais poderoso no R:
x <- c(10, 20, 30, 40, 50)
# Find the number greater than 30 the element
x[x > 30]
# [1] 40 50
# Find the even numbers
x[x %% 2 == 0]
# [1] 10 20 30 40 50
# Multiple conditions (& indicates "and", | indicates "or")
x[x > 20 & x < 50]
# [1] 30 40
x[logical vector], em que as posições com TRUE são mantidas, e as posições com FALSE são filtradas.
(5) Índices nomeados
Nomeie os elementos de um vetor e, em seguida, acesse-os pelo nome:
scores <- c(Alice = 85, Bob = 92, Charlie = 78)
scores
# Alice Bob Charlie
# 85 92 78
scores["Bob"]
# Bob
# 92
6. Operações vetoriais: vetorização automática
(1) O que é “vectorização”?
graph LR
A["x = 1, 2, 3"] --> C["+ 100"]
C --> D["101, 102, 103"]
E["x = 1, 2, 3"] --> F["+ y = 10, 20, 30"]
F --> G["11, 22, 33"]
style A fill:#cce5ff
style E fill:#cce5ff
style C fill:#fff3cd
style F fill:#d4edda
style D fill:#d4edda
style G fill:#d4edda
As operações aritméticas no R são “vetorizadas” por padrão — não é preciso escrever loops.
(2) Vetor + Escalar (Difusão escalar)
x <- c(1, 2, 3, 4, 5)
x + 100 # 100 Broadcast to each element
# [1] 101 102 103 104 105
x * 10
# [1] 10 20 30 40 50
(3) Vetor + Vetor (Operação elemento a elemento)
x <- c(1, 2, 3, 4, 5)
y <- c(10, 20, 30, 40, 50)
x + y
# [1] 11 22 33 44 55
x * y
# [1] 10 40 90 160 250
numpy ou uma compreensão de lista, enquanto no R isso pode ser feito em uma única linha.
(4) O programa entrará em “loop” quando os comprimentos forem diferentes
c(1, 2, 3, 4) + c(10, 20)
# Warning: longer object length is not a multiple of shorter object length
# [1] 11 22 13 24
# The Second Vector Loop:[10, 20, 10, 20]
(5) Funções matemáticas comuns (todas vetorizadas)
| Função | Finalidade | Exemplo |
|---|---|---|
abs() |
valor absoluto | abs(c(-1, -2, 3)) → 1 2 3 |
| Raiz quadrada | sqrt() |
→ sqrt(c(1, 4, 9)) |
| Logaritmo natural | → | |
| Resumo | round() |
|
floor() ceiling() |
Arredondamento para baixo/para cima | floor(1.6) → 1 |
7. Funções de agregação: resumindo vetores em um único valor
| Função | Finalidade | Exemplo |
|---|---|---|
sum() |
Soma | sum(1:5) → 15 |
mean() |
Valor médio | mean(1:5) → 3 |
median() |
Mediana | median(1:5) → 3 |
min() max() |
Mínimo Máximo | max(1:5) → 5 |
sd() |
desvio padrão | sd(1:5) → 1.581 |
var() |
variância | var(1:5) → 2.5 |
length() |
Comprimento | length(1:5) → 5 |
prod() |
produto | prod(1:5) → 120 |
na.rm = TRUE para ignorar valores NA:mean(c(1, 2, NA), na.rm = TRUE) → 1.5
8. Operações comuns: classificação, remoção de duplicatas e pesquisa
(1) Tabela de referência rápida para as três principais operações
| Categoria | Função | Finalidade |
|---|---|---|
| Classificação | sort(x) |
Vetor classificado |
| Ordem de classificação | order(x) |
Posição no índice após a classificação |
| Classificação | rev(x) |
Vetor reverso |
| Remover duplicatas | unique(x) |
Valores únicos |
| Remoção de duplicatas | table(x) |
Estatísticas de frequência |
| Conjunto | union(a, b) |
União |
| Conjunto | intersect(a, b) |
Interseção |
| Conjunto | setdiff(a, b) |
Conjunto de diferenças |
| Pesquisar | match("a", x) |
Primeira ocorrência |
| Pesquisar | "a" %in% x |
Contém o elemento? |
(2) Chave: order() vs sort()
x <- c(3, 1, 4, 1, 5, 9, 2, 6)
# sort() Return a sorted vector
sort(x)
# [1] 1 1 2 3 4 5 6 9
# order() Return the sorted**Index**
order(x)
# [1] 2 4 7 1 3 8 6 5
# Meaning: x's 2nd element is the smallest and comes first, the 4th is the second smallest... After sorting x[order(x)] = sort(x)
order() é muito comum ao classificar data frames: df[order(df$age), ] classifica por idade em ordem crescente.
9. Exemplo completo: Estatísticas de notas dos alunos
A seguir, apresentamos um exemplo de um fluxo de trabalho completo que reúne todos os conceitos abordados nesta aula.
▶ Exemplo: Análise abrangente das notas de 30 alunos
# ============================================
# Comprehensive Analysis of Student Performance
# Features: Create a grade vector, do 5 Statistics by Type
# ============================================
# 1. Create 5 Student Grades(Name Vector)
scores <- c(Alice = 85, Bob = 92, Charlie = 78, David = 95, Eve = 88)
cat("Raw Scores:\n")
print(scores)
# 2. Basic Statistics
cat("\n=== Basic Statistics ===\n")
cat("Total Score:", sum(scores), "\n")
cat("Average Score:", mean(scores), "\n")
cat("Median:", median(scores), "\n")
cat("Highest Score:", max(scores), "\n")
cat("Lowest score:", min(scores), "\n")
cat("Standard Deviation:", round(sd(scores), 2), "\n")
# 3. Find the student with the highest score(Naming Index)
cat("\n=== Top-scoring student ===\n")
print(scores[scores == max(scores)])
# 4. Find 90 Points or more
cat("\n=== 90 Students scoring above a certain score ===\n")
print(scores[scores >= 90])
# 5. Identify the failing grades
cat("\n=== Students who failed(< 60)===\n")
print(scores[scores < 60])
# 6. Sort (descending)
cat("\n=== Sort by score in descending order ===\n")
print(sort(scores, decreasing = TRUE))
# 7. Standardization(z-score:Subtract the mean from all scores, then divide by the standard deviation)
z_scores <- (scores - mean(scores)) / sd(scores)
cat("\n=== Z-Score Standardization ===\n")
print(round(z_scores, 3))
# 8. Rating(Excellent/Good/Passing Grade/Fail)
ratings <- ifelse(scores >= 90, "Excellent",
ifelse(scores >= 80, "Good",
ifelse(scores >= 60, "Passing Grade", "Fail")))
cat("\n=== Rating ===\n")
print(data.frame(Fractions = scores, Rating = ratings))
Resultado esperado (trecho):
Raw Scores:
Alice Bob Charlie David Eve
85 92 78 95 88
=== Basic Statistics ===
Total Score: 438
Average Score: 87.6
Median: 88
Highest Score: 95
Lowest score: 78
Standard Deviation: 6.19
=== 90 Students scoring above a certain score ===
David
95
=== Sort by score in descending order ===
David Bob Alice Eve Charlie
95 92 85 88 78
=== Z-Score Standardization ===
Alice Bob Charlie David Eve
-0.420 0.711 -1.551 1.197 -0.097
(1) Procedimento
| Etapa | Ação | Descrição |
|---|---|---|
| 1 | Criar projeto no RStudio r-vectors |
File → New Project |
| 2 | Criar um novo script score_analysis.R |
Copiar o código acima |
| 3 | Selecionar tudo → Ctrl+Enter |
Enviar para o console |
| 4 | Observe a saída | Veja 6 resultados estatísticos |
❓ Perguntas Frequentes
P: Por que os índices no R começam em 1 em vez de 0? R: O R foi projetado por matemáticos e segue convenções matemáticas (os elementos dos vetores são numerados a partir de 1). Essa é uma das maiores diferenças entre o R e o Python/Java/C. Iniciantes frequentemente caem nessa armadilha: escrevem
x[0]esperando recuperar o primeiro elemento, mas acabam com um vetor vazionumeric(0).
P:
c(1, "a")O que acontece com esse vetor de tipos mistos? R: O R realiza automaticamente uma conversão de tipo — o número 1 é convertido para a string “1”, resultando no vetor de caracteresc("1", "a"). Esse é o mecanismo de “coerção de tipo” do R, que evita erros de tipo, mas também pode ocultar bugs. Recomenda-se manter sempre vetores do mesmo tipo.
P: O comprimento de um vetor é fixo? É possível acrescentar elementos? R: Os vetores do R têm comprimento fixo (não é possível “acrescentar” ou “remover” elementos após a criação). No entanto, é possível “reatribuir” valores a eles:
x <- c(x, 6)(cria um novo vetor e atribui x a ele). A adição frequente é lenta (envolve cópia a cada vez); para conjuntos de dados grandes, usedata.tableoutibble.
P: Qual é a relação entre vetores e matrizes? R: Uma matriz é uma “versão bidimensional” de um vetor — organizada em linhas e colunas (um vetor unidimensional
c(1,2,3,4,5,6), transformado em uma matriz 2×3, torna-sematrix(1:6, nrow = 2)).
P: Como faço para escolher entre
c()epaste()? R:c()concatena elementos de qualquer tipo (números, cadeias de caracteres, valores booleanos), enquantopaste()é específico para concatenar cadeias de caracteres (converte automaticamente em caracteres). Usec()para construir vetores numéricos e usepaste()para construir cadeias de caracteres.
📖 Resumo
- Um vetor é a estrutura de dados mais básica no R: uma coleção ordenada de elementos do mesmo tipo; não há “escalares” no R — um único número é simplesmente um vetor de comprimento 1.
- Métodos de criação:
c()para colunas diretas,:para sequências de números inteiros,seq()para sequências aritméticas,rep()para repetições; usepaste()/paste0()para concatenação de strings - 4 métodos de indexação: números inteiros positivos (com base em 1,
x[0]é um vetor vazio), números inteiros negativos (exclusão), vetores lógicos (filtragem), índices nomeados (por nome) - As operações aritméticas são vetorizadas automaticamente (vetor + escalar, vetor + vetor), portanto, não há necessidade de escrever loops; as funções matemáticas comuns (sqrt, log, exp) também são processadas elemento a elemento.
- As funções de agregação (
sum()mean()sd()median()) reduzem vetores a um único valor; todas suportamna.rm = TRUEpara ignorar valores NA - Use
sort()/order()para classificação (a funçãoorderretorna um índice),unique()para deduplicação,table()para frequência,union/intersect/setdiffpara conjuntos ematch()/%in%para consultas
📝 Exercícios
-
Problema básico: Crie um vetor de números inteiros de 1 a 10 usando três métodos diferentes: ①
c()②:③seq(); useidentical()para verificar se os resultados dos três são exatamente os mesmos. Faça uma captura de tela da saída do console e salve-a. -
Problema básico: Crie um vetor
x <- c(2, 4, 6, 8, 10), use indexação lógica para extrair os elementos maiores que 5 e exiba o vetor filtrado. Salve o código e uma captura de tela do resultado. -
Exercício básico: Concatene
paste()compaste("Rank", 1:5, "th", sep = "")e registre o resultado; em seguida, concatenepaste0()compaste0("x", 1:5, "y")e registre o resultado. Faça uma captura de tela e salve-a. -
Problema avançado: Simule as notas de 10 alunos: ① Gere notas aleatoriamente usando
sample(60:100, 10); ② Calcule a média, a mediana, a nota mais alta, a nota mais baixa e o desvio padrão; ③ Usewhich.max()para determinar a classificação do aluno com a nota mais alta; ④ Conte o número de alunos aprovados (≥60). Salve uma captura de tela do resultado de cada etapa. -
Desafio: Escreva um script para simular um cenário de “alocação de alunos em turmas”: ① Crie um vetor
names <- c("Alice", "Bob", ...)contendo os nomes de 10 alunos; ② Crie um vetorscores <- sample(60:100, 10)contendo 10 notas; ③ Nomeie-o comonames(scores) <- names; ④ Identifique os nomes dos alunos que obtiveram nota 90 ou mais; ⑤ Identifique os nomes dos alunos que foram reprovados; ⑥ Classifique-os em ordem crescente e imprima-os usandosort(scores). Após executar o script, faça uma captura de tela e salve toda a saída do console.