Menu
Coddy logo textTech

Podsumowania wierszy i kolumn

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

Funkcje rowSums() i rowMeans() zwracają po jednym wyniku dla każdego wiersza; colSums() i colMeans() — po jednym dla każdej kolumny. Tutaj każdy wiersz odpowiada uczniowi, a każda kolumna — testowi:

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(rowMeans(scores))
print(colSums(scores))

Wynik:

[1] 80.00000 73.33333
[1] 140 165 155

W przypadku każdego innego podsumowania apply(m, 1, f) wywołuje funkcję f dla każdego wiersza, a apply(m, 2, f) dla każdej kolumny:

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
print(apply(scores, 1, max))
print(apply(scores, 2, min))

Wynik:

[1] 90 85
[1] 60 75 70

Połącz podsumowanie z which.max(), aby znaleźć najlepszy wiersz lub kolumnę:

scores <- matrix(c(80, 90, 70, 60, 75, 85), nrow = 2, byrow = TRUE)
best_test <- which.max(colMeans(scores))
print(best_test)
print(round(rowMeans(scores), 1))

Wynik:

[1] 2
[1] 80.0 73.3

apply() akceptuje również funkcję, którą napiszesz na bieżąco za pomocą function(r). W tym przypadku zlicza wartości większe niż 5 w każdym wierszu:

m <- matrix(c(3, 8, 1, 9, 2, 7), nrow = 2, byrow = TRUE)
print(apply(m, 1, function(r) sum(r > 5)))

Wynik:

[1] 1 2
challenge icon

Wyzwanie

Łatwy

Uzupełnij class_report(scores). Każdy wiersz scores to jeden uczeń, a każda kolumna to jeden test. Zwróć jeden wiersz na ucznia, Student 1: 81.7, ze średnią ucznia zaokrągloną do jednego miejsca po przecinku. Dodaj ostatni wiersz Best test: , po którym podaj numer kolumny z najwyższą średnią.

Dostarczony kod odczytuje macierz z jednego wiersza: wiersze są oddzielone przez ;, a wartości w wierszu przez ,, więc 1,2;3,4 to macierz z wierszami 1 2 i 3 4. Kod wyświetla każdy zwrócony wiersz.

Spróbuj swoich sił

class_report <- function(scores) {
  # Wpisz tutaj swój kod
  character(0)
}

# 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(class_report(parse_matrix(input[1])), 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