Inną dużą różnicą w porównaniu z popularnymi językami obiektowymi, takimi jak te wspomniane wcześniej, jest to, że R implementuje polimorfizm parametryczny, znany również jako funkcje ogólne, co oznacza, że metody należą do funkcji, a nie do klas. Funkcje ogólne pozwalają na użycie tej samej nazwy dla wielu różnych funkcji, z wieloma różnymi zestawami argumentów, z wielu różnych klas. Oznacza to, że składnia wywołania metody klasy różni się od składni normalnie połączonej w łańcuchy, którą można znaleźć w innych językach (zwykle zaimplementowana z „.” (Kropką) między klasą a metodą, którą chcemy wywołać), co nazywa się przekazywaniem komunikatów. Wywołania metod w R wyglądają jak wywołania funkcji, a R musi wiedzieć, które nazwy wymagają prostych wywołań funkcji, a które nazwy wymagają wywołań metod. Jeśli przeczytałeś poprzednie sekcje, powinieneś zrozumieć, dlaczego jest to ważne. R musi mieć mechanizm umożliwiający rozróżnienie tego, co ma robić. Ten mechanizm nazywa się funkcjami ogólnymi. Korzystając z funkcji ogólnych, rejestrujemy pewne nazwy, które mają być traktowane jako metody w języku R i działają one jako dyspozytorzy. Kiedy wywołujemy zarejestrowane funkcje ogólne, R zajrzy do łańcucha atrybutów obiektu, który jest przekazywany w wywołaniu, i będzie szukał funkcji, które pasują do wywołania metody dla typu tego obiektu; jeśli znajdzie taki, nazwie go. Być może zauważyłeś, że funkcje plot () i summary () mogą zwracać różne wyniki, w zależności od obiektów, które są do nich przekazywane (na przykład ramka danych lub instancja modelu liniowego). Dzieje się tak, ponieważ są to funkcje ogólne, które implementują polimorfizm. Ten sposób pracy zapewnia użytkownikom proste interfejsy, które mogą znacznie uprościć ich zadania. Na przykład, jeśli eksplorujesz nowy pakiet iw pewnym momencie otrzymujesz wynik pochodzący z pakietu, spróbuj wywołać plot (result)) i możesz być zaskoczony, gdy otrzymasz jakiś rodzaj wykresu, który ma sens. To nie jest powszechne w innych językach. Podczas programowania zorientowanego obiektowo za pomocą modeli S3 i S4 języka R należy pamiętać, że nie należy wywoływać metod bezpośrednio, ale zamiast tego deklarować odpowiadające im funkcje ogólne i wywoływać je. Na początku może to być trochę zagmatwane, ale to tylko jedna z unikalnych cech R, do której przyzwyczajasz się z czasem