Indexando Matrizes
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 18 de 64.
m[i, j] é o valor na linha i e na coluna j. Deixe um dos lados vazio para obter uma linha ou coluna inteira: m[i, ] é a linha i e m[, j] é a coluna j.
m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])Saída:
[1] 6
[1] 1 2 3
[1] 2 5Os mesmos índices funcionam à esquerda de <-, portanto uma célula, uma linha ou uma coluna pode ser substituída:
m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)Saída:
[,1] [,2] [,3]
[1,] 0 5 0
[2,] 7 8 9As linhas e as colunas podem ter nomes, definidos com rownames() e colnames(). Então, um nome funciona como um índice:
sales <- matrix(c(3, 5, 2, 8), nrow = 2, byrow = TRUE)
rownames(sales) <- c("north", "south")
colnames(sales) <- c("jan", "feb")
print(sales["south", "feb"])
print(sales[, "jan"])Saída:
[1] 8
north south
3 2 Vetores de índices selecionam um bloco de linhas e colunas de uma só vez:
m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])Saída:
[,1] [,2]
[1,] 2 3
[2,] 5 6
[1] 1 7Desafio
FácilComplete cell_report(m, r, c). Retorne três linhas: Cell: com o valor na linha r e na coluna c, Row: com os valores da linha r e Column: com os valores da coluna c. Separe os valores com espaços simples.
O código fornecido lê uma matriz de uma linha: as linhas são separadas por ; e os valores de uma linha por ,, portanto 1,2;3,4 é uma matriz com as linhas 1 2 e 3 4. As duas linhas seguintes contêm r e c. O código imprime cada linha retornada.
Experimente você mesmo
cell_report <- function(m, r, c) {
# Escreva seu código aqui
c("Cell: ", "Row: ", "Column: ")
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cell_report(parse_matrix(input[1]), as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online