Indexación de matrices
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 18 de 64.
m[i, j] es el valor en la fila i y la columna j. Deja un lado vacío para obtener una fila o columna completa: m[i, ] es la fila i y m[, j] es la columna j.
m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])Salida:
[1] 6
[1] 1 2 3
[1] 2 5Los mismos índices funcionan a la izquierda de <-, por lo que se puede reemplazar una celda, una fila o una columna:
m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)Salida:
[,1] [,2] [,3]
[1,] 0 5 0
[2,] 7 8 9Las filas y las columnas pueden tener nombres, establecidos con rownames() y colnames(). Después, un nombre funciona como í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"])Salida:
[1] 8
north south
3 2 Los vectores de índices seleccionan un bloque de filas y columnas a la vez:
m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])Salida:
[,1] [,2]
[1,] 2 3
[2,] 5 6
[1] 1 7Desafío
FácilCompleta cell_report(m, r, c). Devuelve tres líneas: Cell: con el valor de la fila r y la columna c, Row: con los valores de la fila r y Column: con los valores de la columna c. Separa los valores con espacios simples.
El código proporcionado lee una matriz de una línea: las filas se separan mediante ; y los valores de una fila mediante ,, por lo que 1,2;3,4 es una matriz con las filas 1 2 y 3 4. Las dos líneas siguientes contienen r y c. El código imprime cada línea devuelta.
Pruébalo tú mismo
cell_report <- function(m, r, c) {
# Escribe tu código aquí
c("Cell: ", "Row: ", "Column: ")
}
# Código de entrada/salida suministrado: mantenlo tal 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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online