Balíčky pro R se používají k rozšíření funkcionality a usnadnění práce s daty. R6 je jedním z těchto balíčků, který poskytuje implementaci zapouzdřeného objektově orientovaného programování (někdy také označovaného jako klasické objektově orientované programování) v R.

Tento přístup umožňuje pracovat s objekty, kde přístup k datům a jejich modifikace probíhají prostřednictvím metod, spíše než přímým přístupem k interním proměnným. R6 je navržen tak, aby uživatelům umožnil efektivně využívat objektově orientované principy, čímž zjednodušuje práci s komplexními datovými strukturami a kódem.

Hlavní vlastnosti balíčku R6

editovat

V balíčku R6 jsou objekty implementovány tak, že obsahují veřejné metody a skryté interní proměnné, které nejsou přístupné z vnějšku bez použití těchto metod. R6 je podobný referenčním třídám v R, ale je efektivnější, protože nezávisí na třídách S4 a balíčku methods. Díky tomu má menší nároky na paměť a procesorový čas. To vede k lepšímu výkonu při práci s velkými nebo složitými objekty.[1]

Použití balíčku R6

editovat

Balíček R6 umožňuje:

  • Pracovat s objekty, které si uchovávají svůj stav a tento stav se může měnit v průběhu času.
  • Vytvářet složitější objektové struktury s podporou dědičnosti a zapouzdření.
  • Zefektivnit práci s objekty, aniž by se při každé úpravě vytvářely nové kopie.[2]

R6 třídy

editovat

Třídy R6 mají několik výhod oproti jiným přístupům:

  1. Lehčí než S4: Jsou efektivnější a vyhýbají se některým problémům spojeným s používáním S4, na kterém jsou referenční třídy v R založeny.
  2. Referenční sémantika: Na rozdíl od mnoha objektů v R mají objekty třídy R6 referenční sémantiku, chovají se tedy jako reference. To umožňuje sdílení a modifikaci dat mezi objekty bez vytváření jejich kopií.
  3. Podpora veřejných a soukromých metod: Umožňuje kontrolu přístupu k interním datům a funkcím objektu.
  4. Aktivní vazby: Umožňují automatické výpočty hodnot na základě změn v jiných objektech nebo proměnných.
  5. Dědičnost: Podporuje vytváření hierarchií tříd, které mohou fungovat napříč různými balíčky v R, což usnadňuje opětovné použití a rozšiřování kódu.

Historie a kontext

editovat

Autorem balíčku R6 je Winston Chang. Název R6 vychází z humoristického odkazu na systémy tříd S3 a S4. Když byly představeny referenční třídy v R, někteří uživatelé je neformálně nazvali R5. Tento název nebyl oficiální, balíček R6 však navazuje na tuto tradici.

R5 byl také kódovým označením pro jiný systém objektů, který měl řešit některé problémy s S4 týkající se syntaxe a výkonu. Větev R5 však byla po počáteční fázi vývoje zastavena a nikdy nebyla zveřejněna.

Práce s balíčkem R6

editovat

Instalace balíčku

editovat

Instalaci provádíme pomocí následujícího příkazu:

install.packages("R6")

Načtení balíčku

editovat

Načtení balíčku provádíme pomocí:

library(R6)

Vytvoření třídy

editovat

Zde je příklad vytvoření jednoduché třídy Dog:

Dog <- R6Class("Dog",
     public = list(
     name = NULL,
     initialize = function(name) {
      self$name <- name
      },
     bark = function() {
           cat(self$name, "says: Woof!\n")
   }
 )
)

Vytvoření a práce s instancí třídy

editovat

Vytvoření instance a použití metody bark:

my_dog <- Dog$new(name = "Buddy")
my_dog$bark()

# Výstup: Buddy says: Woof!

Tento příklad ukazuje základní třídu Dog s jedním polem name a jednou metodou bark,která vypíše jednoduchou zprávu.[3][4]

Reference

editovat
  1. Encapsulated Classes with Reference Semantics. r6.r-lib.org [online]. [cit. 2024-08-12]. Dostupné online. (anglicky) 
  2. Introduction. r6.r-lib.org [online]. [cit. 2024-08-12]. Dostupné online. (anglicky) 
  3. R6/vignettes/Introduction.Rmd at 507867875fdeaffbe7f7038291256b798f6bb042 · r-lib/R6. GitHub [online]. [cit. 2024-08-12]. Dostupné online. (anglicky) 
  4. Object-Oriented Programming (OOP) in R with R6 - The Complete Guide. www.appsilon.com [online]. [cit. 2024-08-12]. Dostupné online. (anglicky)