Menu
Coddy logo textTech

Indeksowanie macierzy

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 18 z 64.

m[i, j] to wartość w wierszu i i kolumnie j. Pozostaw jedną ze stron pustą, aby pobrać cały wiersz lub kolumnę: m[i, ] to wiersz i, a m[, j] to kolumna j.

m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])

Wynik:

[1] 6
[1] 1 2 3
[1] 2 5

Te same indeksy działają po lewej stronie <-, więc można zastąpić komórkę, wiersz lub kolumnę:

m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)

Wynik:

     [,1] [,2] [,3]
[1,]    0    5    0
[2,]    7    8    9

Wiersze i kolumny mogą mieć nazwy, ustawiane za pomocą rownames() i colnames(). Wtedy nazwa działa jak indeks:

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"])

Wynik:

[1] 8
north south 
    3     2 

Wektory indeksów wybierają jednocześnie blok wierszy i kolumn:

m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])

Wynik:

     [,1] [,2]
[1,]    2    3
[2,]    5    6
[1] 1 7
challenge icon

Wyzwanie

Łatwy

Uzupełnij cell_report(m, r, c). Zwróć trzy wiersze: Cell: z wartością w wierszu r i kolumnie c, Row: z wartościami wiersza r oraz Column: z wartościami kolumny c. Oddziel wartości pojedynczymi spacjami.

Dostarczony kod odczytuje macierz z jednego wiersza: wiersze są oddzielone znakiem ;, a wartości wiersza znakiem ,, więc 1,2;3,4 to macierz z wierszami 1 2 i 3 4. W kolejnych dwóch wierszach znajdują się r i c. Kod wyświetla każdy zwrócony wiersz.

Spróbuj swoich sił

cell_report <- function(m, r, c) {
  # Wpisz tutaj swój kod
  c("Cell: ", "Row: ", "Column: ")
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online