Dwa pytania R:
- Jaka jest różnica między typem (zwracanym przez
typeof
) a klasą (zwracaną przezclass
) zmiennej? Czy różnica jest podobna do tej w, powiedzmy, języku C ++? - Jakie są możliwe typy i klasy zmiennych?
Dwa pytania R:
typeof
) a klasą (zwracaną przez class
) zmiennej? Czy różnica jest podobna do tej w, powiedzmy, języku C ++?Odpowiedzi:
W R każdy „obiekt” ma a mode
i 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, list
ale są opakowane w data.frame
obiekty. Ta ostatnia umożliwia korzystanie z funkcji składowych, a także przeciążanie funkcji, takich jak print
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 :
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 typeof
i class
są powiązane dla każdego typu.
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):
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.