Zadanie 1: Obiekty S3

Ćwiczenie 5.1: Profil Rowerzysty

W pliku bike.zip zapisane są dane o trasach rowerowych w formacie tcx. Wczytać je można za pomocą funkcji readTCX() z pakietu trackeR. Usunąć zduplikowane względem czasu wpisy można wykorzystując funcję duplicated().

Wykorzystaj te dane do tworzenia profilu rowerzysty. Profil powinien zawierać informacje o przejechanych trasach oraz pozwalać na

  • obliczenie postawowych statystyk dla każdej trasy (liczba przejechanych kilometrów, sumaryczna wysokość podjazdów);
  • obliczenie postawowych statystyk dla rowerzysty (liczba tras, przejechanych kilometrów, sumaryczna wysokość podjazdów, najdłuższa trasa, najwyższy sumaryczny podjazd) w okresie tygodnia, miesiąca, roku, całej hitorii;
  • wizualizację każdej trasy: wyświetlenie średniej prędkości oraz wyskości w zależności od czasu albo od przejechanej odległości;
  • wizualizację profilu: liczba przejechanych kilometrów w każdym dniu tygodnia, w każdym tygodniu miesiąca bądź w każdym miesiącu roku;
  • porównywanie dwóch profili pod względem podstawowych statystyk (liczba tras, przejechanych kilometrów, sumaryczna wysokość podjazdów) w okresie tygodnia, miesiąca, roku.

Zaprojektuj i zaimplementuj S3 obiekty oraz odpowiednie standardowe (print(), head(), tail(), mean(), min(), max(), plot(), etc) i niestandardowe funkcje generyczne. Posługuj się poniższym przykładem dla przychodni dietetycznej.

trajectory <- function(times, traj) {
 structure(list(times = times, traj = traj), class = "trajectory")
}

print.trajectory <- function(x){
 cat("* Times ="); print (x$times)
 cat("* Traj = \n"); print (x$traj)
}

plot.trajectory <- function(x, ...){
   matplot(x$times, t(x$traj), xaxt="n", type="l", ylab= "", xlab="", pch=1, ...)
   axis(1,at=x$times)
 }

countmissing <- function(x) UseMethod("countmissing")

countmissing.trajectory <- function (x) {
   sum(is.na(x$traj))
}

sekrety_diety <- trajectory(
 times=c(1,3,4,5),
 traj=rbind (
 c(15,15.1, 15.2, 15.2),
 c(16,15.9, 16,16.4),
 c(15.2, NA, 15.3, 15.3),
 c(15.7, 15.6, 15.8, 16)
 )
)


Minimum na zaliczenie

Klasa track

  1. Konstruktor ma dwa argumenty: plik z trasą oraz nazwa trasy

    • W przypadku gdy nazwa trasy nie jest podana, używa się domyślnej nazwy:

      1. jeżeli początek trasy jest w godzinach 5:00–12:00, „Morning ride”,
      2. jeżeli początek trasy jest w godzinach 12:00–18:00, „Afternoon ride”,
      3. Jeżeli początek trasy jest w godzinach 18:00–23:00, „Evening ride”,
      4. Jeżeli początek trasy jest w godzinach 23:00–5:00, „Night ride”.
  2. Funkcja generyczna velocity(), która oblicza prędkość rowerzysty w każdym momencie. Wynikiem funkcji jest wektor.
  3. Funkcja plot(), która wyświetla wysokość lub prędkość rowerzysty w zależności od czasu jazdy lub przejechanego dystansu. Wykres przykładowy: