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 ++?
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:
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.
"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.
Odpowiedzi:
W R każdy „obiekt” ma a
mode
i aclass
. 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,
list
ale są opakowane wdata.frame
obiekty. Ta ostatnia umożliwia korzystanie z funkcji składowych, a także przeciążanie funkcji, takich jakprint
zachowanie niestandardowe.typeof
(storage.mode
) zwykle podaje te same informacje co,mode
ale nie zawsze. Przykładem:typeof(c(1,2)) # [1] "double" mode(c(1,2)) # [1] "numeric"
Powód tego można znaleźć tutaj :
Link, który zamieściłem powyżej, zawiera również listę wszystkich natywnych R
basic types
(wektory, listy itp.) I wszystkichcompound objects
(czynniki i ramki danych), a także kilka przykładów tegomode
, jaktypeof
iclass
są powiązane dla każdego typu.źródło
oldClass(matrix(1:10, 2,5)) # NULL
type
tak 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
class
w R oznacza coś innego niż to, czego można się spodziewać. Z podręcznika definicji języka R (dostarczonego wraz z wersją R):źródło