2011-08-05 10 views
9

Jeśli podano obiekt x, czy istnieje sposób klasyfikacji, czy jest on S3 lub S4 (lub "inny")? Przyjrzałem się is.object() i isS4() i mogę stwierdzić, że coś jest obiektem (lub nie) i że jest to obiekt S4 (lub nie). Jednak nie wydaje mi się, że obiekty S3 są dopełnieniem wszystkich obiektów, które nie są obiektami S4.Programowe rozróżnianie obiektów S3 i S4 w R

W związku z tym, w jaki sposób można wykonać te przypisania programowo?

Oto przykład czegoś, bugs me, zaczerpnięte z pomocą dla is.object():

a = as.factor(1:3) 
is.object(a) # TRUE 
isS4(a) # FALSE 

Czy to znaczy, że a jest obiektem S3?

Odpowiedz

10

Jeśli jest to obiekt, a nie jest to S4 to jest S3:

is.object(foo) & !isS4(foo) 

is.object sprawdza jakimś magicznym obiekt bitowy, który pobiera ustawiony, gdy sprawa ma atrybut class, więc jego istocie szybko sposób wykonania any(names(attributes(foo))=="class"), który definiuje obiekt S3.

+0

Dobrze, że prawie na nie odpowie. :) – Iterator

+0

Teraz myślę, że powinno być 'isS3' wzdłuż linii tego, co sugerujesz z' any ... '. W obecnej sytuacji oparcie zadania na logicznej operacji '(A &! B)' nie pozwala na "C", który jest parami wykluczający się wzajemnie z każdym z "A" i "B" (np. Niektóre przyszłe "S5" klasa, która nie jest ani S3, ani S4). Na razie działa to, ale mam wrażenie, że idę w kierunku błędu typu Y2K. :( – Iterator

Powiązane problemy