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, 3 retorna três números separados; para colocá-los em uma lista, é preciso digitar [1, 2, 3]. Mas o R é diferente — no R, 1, 2, 3 já é 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



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:

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

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

100%
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
⚠️ Observação: Todos os elementos de um vetor no R devem ser do mesmo tipo. Se houver tipos misturados, o R irá convertê-los automaticamente para o tipo “mais amplo”:

R
# Mixed Types:Mixing Numbers and Strings → Convert All to Strings
c(1, "a", TRUE)
# [1] "1" "a" "TRUE"
💡 Dica: Essa é a maior diferença entre as listas do R e do Python — os vetores do R são homogêneos, enquanto as listas do Python são heterogêneas. Para armazenar dados de tipos diferentes, use uma lista (list()) (abordada na Lição 9).

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

R
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

R
# 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()

R
# 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"
💡 Dica: A diferença entre 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

R
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"
⚠️ Observação: Essa é uma das armadilhas mais comuns no R — os iniciantes que vêm do Python tendem a escrever instintivamente x[0], o que retorna um vetor vazio em vez do primeiro elemento.

(3) Índices inteiros negativos (excluindo elementos)

R
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:

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
💡 Dica: A essência de um índice lógico é 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:

R
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”?

100%
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)

R
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)

R
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
💡 Dica: Essa é uma das principais vantagens do R em relação ao Python. No Python, para somar duas listas, é preciso usar 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

R
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]
⚠️ Observação: Será exibido um aviso se os comprimentos não forem múltiplos inteiros um do outro. Esse tipo de erro é muito comum no R; certifique-se de que os dois vetores tenham o mesmo comprimento ao escrever o código.

(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
💡 Dica: Todas essas funções agregadas aceitam o parâmetro 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()

R
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)
💡 Dica: 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

R
# ============================================
# 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))
▶ Experimente

Resultado esperado (trecho):

TEXT 📖 Somente leitura
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 vazio numeric(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 caracteres c("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, use data.table ou tibble.

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-se matrix(1:6, nrow = 2)).

P: Como faço para escolher entre c() e paste()? R: c() concatena elementos de qualquer tipo (números, cadeias de caracteres, valores booleanos), enquanto paste() é específico para concatenar cadeias de caracteres (converte automaticamente em caracteres). Use c() para construir vetores numéricos e use paste() para construir cadeias de caracteres.


📖 Resumo


📝 Exercícios

  1. Problema básico: Crie um vetor de números inteiros de 1 a 10 usando três métodos diferentes: ① c():seq(); use identical() 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.

  2. 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.

  3. Exercício básico: Concatene paste() com paste("Rank", 1:5, "th", sep = "") e registre o resultado; em seguida, concatene paste0() com paste0("x", 1:5, "y") e registre o resultado. Faça uma captura de tela e salve-a.

  4. 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; ③ Use which.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.

  5. 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 vetor scores <- sample(60:100, 10) contendo 10 notas; ③ Nomeie-o como names(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 usando sort(scores). Após executar o script, faça uma captura de tela e salve toda a saída do console.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%