Zastanawiałem się, jakie są różnice między trybem, klasą i typem R obiektów? Typ obiektu R można uzyskać za pomocą funkcji typeof (), mode by mode () i class by class ().
Jakieś inne podobne funkcje i koncepcje, za którymi tęskniłem?
class()Służy do zdefiniowania / zidentyfikowania co „typ” dany przedmiot jest z punktu widzenia programowania obiektowego w R. więc dla
> x <-1:3>class(x)[1]"integer"
zostanie użyta dowolna funkcja ogólna, która ma metodę „liczby całkowitej”.
typeof()podaje „typ” obiektu z punktu widzenia R., natomiast mode()podaje „typ” obiektu z punktu widzenia Beckera, Chambersa i Wilksa (1988). Ten ostatni może być bardziej kompatybilny z innymi implementacjami S zgodnie z instrukcją R Language Definition .
Prawdopodobnie błądziłbym po stronie używania typeof()w większości przypadków, chyba że byłoby to do przekazywania obiektów R do skompilowanego kodu, gdzie storage.mode()będzie to przydatne.
Jest to użytecznie omówione w Definicji języka R w powiązaniu z powyższym.
@smwikipedia, ponieważ R ma dziedzictwo, które obejmuje S-Plus i S, a ten drugi język ewoluował z czasem. Ponadto istnieje potrzeba rozróżnienia między obiektami, które użytkownicy mogą tworzyć, a typami obiektów podstawowych.
„tryb” to wzajemnie wykluczająca się klasyfikacja obiektów według ich podstawowej struktury. Tryby „atomowy” są numeryczne, złożone, znakowe i logiczne. Obiekty rekurencyjne mają tryby takie jak „lista” lub „funkcja” lub kilka innych. Obiekt ma jeden i tylko jeden tryb.
„klasa” jest właściwością przypisaną do obiektu, która określa, w jaki sposób działają z nim funkcje ogólne. To nie wyklucza się wzajemnie. Jeśli do obiektu nie przypisano żadnej konkretnej klasy, takiej jak prosty wektor numeryczny, jego klasa jest zwykle taka sama jak jego tryb, zgodnie z konwencją.
Zmiana trybu obiektu jest często nazywana „przymusem”. Tryb obiektu może się zmienić bez konieczności zmiany klasy.
Główną różnicą między klasą a typofem jest to, że użytkownik może zdefiniować pierwszy, ale typ nie. Na przykład zdefiniuj listę
> x<-list("a",c(1,2))># x is a list>class(x)[1]"list"># class can be user defined>class(x)<-"newclass">class(x)[1]"newclass">typeof(x)[1]"list"# you cannot assign a different type using typeof()>typeof(x)<-"newclass"Errorintypeof(x)<-"newclass": could not find function"typeof<-"
Nadanie określonej nazwy klasy obiektowi zdefiniowanemu przez użytkownika jest bardzo przydatne do pisania programów. Pozwala oznaczać obiekty zdefiniowane przez użytkownika w podobny sposób, jak dzieje się w obiektowych językach programowania.
Zgodnie z Rdokumentacją typeofi classtwierdzenie o „głównej różnicy” jest nieprawidłowe. classjest atrybutem obiektu, który można przypisać niezależnie od jego trybu pamięci wewnętrznej, natomiast „typeof określa typ (R wewnętrzny) lub tryb pamięci dowolnego obiektu”. Jedna opisuje cechę logiczną, a druga cechę fizyczną obiektu.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.