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 5Te 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 9Wiersze 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 7Wyzwanie
ŁatwyUzupeł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")
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
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online