Rodzaje i klasy zmiennych

84

Dwa pytania R:

  1. Jaka jest różnica między typem (zwracanym przez typeof) a klasą (zwracaną przez class) zmiennej? Czy różnica jest podobna do tej w, powiedzmy, języku C ++?
  2. Jakie są możliwe typy i klasy zmiennych?
Lew
źródło
Ten powiązany post może również dostarczyć przydatnych informacji: stackoverflow.com/questions/8855589/ ...
Dominic Comtois

Odpowiedzi:

96

W R każdy „obiekt” ma a modei a class. Pierwsza reprezentuje sposób przechowywania obiektu w pamięci (numer, znak, lista i funkcja), podczas gdy druga reprezentuje jego abstrakcyjny typ. Na przykład:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Jak widać, ramki danych są przechowywane w pamięci, listale są opakowane w data.frameobiekty. Ta ostatnia umożliwia korzystanie z funkcji składowych, a także przeciążanie funkcji, takich jak printzachowanie niestandardowe.

typeof( storage.mode) zwykle podaje te same informacje co, modeale nie zawsze. Przykładem:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Powód tego można znaleźć tutaj :

Funkcja typeof specyficzna dla języka R zwraca typ obiektu R.

Tryb funkcji dostarcza informacji o trybie obiektu w rozumieniu Beckera, Chambers & Wilks (1988) i jest bardziej kompatybilny z innymi implementacjami języka S

Link, który zamieściłem powyżej, zawiera również listę wszystkich natywnych R basic types(wektory, listy itp.) I wszystkich compound objects(czynniki i ramki danych), a także kilka przykładów tego mode, jak typeofi classsą powiązane dla każdego typu.

diliop
źródło
1
"W R każdy" obiekt "ma tryb i klasę", o ile jest oglądany z perspektywy struktury klasy S4 OOP. W S3 obiekty mogą nie mieć przypisanych nazw klas:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER
6

typetak naprawdę odnosi się do różnych struktur danych dostępnych w R. Ta dyskusja w podręczniku Definicje języka R może pomóc Ci rozpocząć pracę z obiektami i typami.

Z drugiej strony classw R oznacza coś innego niż to, czego można się spodziewać. Z podręcznika definicji języka R (dostarczonego wraz z wersją R):

2.2.4 Klasy

R ma rozbudowany system klas 1 , głównie kontrolowany przez atrybut class. Ten atrybut jest wektorem znaków zawierającym listę klas, z których dziedziczy obiekt. Stanowi to podstawę funkcjonalności „metod ogólnych” w R.

Do tego atrybutu można uzyskać dostęp i manipulować nim praktycznie bez ograniczeń przez użytkowników. Nie ma żadnego sprawdzenia, czy obiekt faktycznie zawiera komponenty oczekiwane przez metody klas. Dlatego zmiana atrybutu klasy powinna być przeprowadzana ostrożnie, a gdy są one dostępne, należy preferować określone funkcje tworzenia i wymuszania.

Dirk Eddelbuettel
źródło