Indexação e subconjuntos de matrizes
Acesse linhas, colunas e elementos usando a notação [row, col].
Indexação e subconjuntos de matrizes é uma aula grátis de R Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.
Noções básicas de indexação de matrizes
Para acessar elementos de uma matriz, use a notação m[row, col]. Os índices de linhas e colunas começam em 1 no R. A vírgula é obrigatória — omiti-la trata a matriz como um vetor simples.
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)
# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')
# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')Extraindo uma linha inteira
Deixe o índice da coluna em branco para extrair uma linha inteira. O resultado é um vector (a dimensão da matriz é removida). A vírgula ainda precisa estar presente.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)
# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')Extraindo uma coluna inteira
Deixe o índice da linha em branco para extrair uma coluna inteira. Assim como na extração de uma linha, o resultado é um vector. A vírgula que separa as posições da linha e da coluna ainda precisa estar presente.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean: ', mean(math_scores), '
')
cat('Math max: ', max(math_scores), '
')Selecionando várias linhas e colunas
Use um vector de índices para extrair várias linhas ou colunas de uma só vez. O resultado é uma submatriz (ainda uma matriz, não um vector), preservando a estrutura bidimensional.
m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)
# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')Acessando por nome de linha/coluna
Se uma matriz tiver nomes de linhas e colunas, você poderá indexá-la pelo nome em vez da posição. Isso torna o código mais legível e resistente à reordenação de linhas ou colunas.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE,
dimnames = list(
c('Alice', 'Bob', 'Carol'),
c('Math', 'Sci', 'Eng', 'Hist')
))
# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])Indexação lógica em matrizes
Você pode usar um vector lógico (ou uma matriz lógica) para selecionar elementos. Quando um vector lógico é usado em uma dimensão, ele seleciona as linhas ou colunas cujo valor é TRUE.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)Indexação negativa — excluindo linhas/colunas
Adicione o prefixo - a um índice para excluir essa linha ou coluna. Essa é uma forma simples de remover linhas ou colunas específicas sem listar todas as outras que você deseja manter.
m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)
# Drop row 2
cat('Without row 2:
')
print(m[-2, ])
# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])Elemento único com drop = FALSE
Por padrão, extrair uma única linha ou coluna remove a dimensão (retorna um vector). Use drop = FALSE para manter o resultado como uma matriz (preservando a estrutura de linhas e colunas).
m <- matrix(1:9, nrow = 3, ncol = 3)
# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
') # numeric (vector)
# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')Substituindo valores por índice
Você pode modificar elementos específicos combinando indexação e atribuição. Isso funciona para elementos únicos, linhas inteiras, colunas inteiras ou submatrizes.
m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)
# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)
# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)Indexação linear (simples)
Internamente, uma matriz é armazenada como um vector simples (coluna por coluna). Você pode acessar elementos usando um único índice inteiro nessa ordem linear. Isso pode ser útil em algumas operações em bloco.
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)
# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')
# Replace flat index 4
m[4] <- 99
print(m)Resumo da indexação
Referência rápida para indexação de matrizes no R:
m[r, c]— elemento único na linha r e coluna cm[r, ]— linha r inteiram[, c]— coluna c inteiram[c(r1,r2), c(c1,c2)]— submatrizm['name', 'name']— acesso por nome da dimensãom[-r, ]— exclui a linha rm[logical_vec, ]— seleção lógica de linhasm[r, , drop=FALSE]— mantém o resultado como matriz
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,] =', m[2,], '
')
cat('m[,3] =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])Verificação rápida
O que m[-2, ] retorna para uma matriz m com 3 linhas?
Recapitulação: indexação de matrizes
Ótimo trabalho! Principais aprendizados desta lição:
m[r, c]usa primeiro a linha e depois a coluna — ambas as posições são separadas por vírgula- Deixe um dos lados em branco (
m[r, ]oum[, c]) para extrair linhas ou colunas inteiras - Índices negativos excluem linhas ou colunas
- Vectores lógicos podem filtrar linhas ou colunas
- Dimensões nomeadas permitem indexar por nome, tornando o código mais legível
drop = FALSEimpede a perda de dimensão ao extrair linhas ou colunas únicas
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
for (subj in colnames(scores)) {
best <- rownames(scores)[which.max(scores[, subj])]
cat('Best in', subj, ':', best, '
')
}Perguntas Frequentes
A aula “Indexação e subconjuntos de matrizes” é grátis?
Sim — o texto completo de “Indexação e subconjuntos de matrizes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.
O que vou aprender em “Indexação e subconjuntos de matrizes”?
Acesse linhas, colunas e elementos usando a notação [row, col]. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar R Academy?
Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Indexação e subconjuntos de matrizes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de R Academy?
Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criando matrizes com matrix()
- Indexação e subconjuntos de matrizes
- Aritmética e operações com matrizes
- Transposição e remodelagem de matrizes