r=ks.test(x=rnorm(100), "dnorm")
class(r)
[1] "htest"
## Doesnt work, "htest" is class in stats
setClass("Jergon", representation(fit="htest"))
[1] "Jergon"
Warning message:
undefined slot classes in definition of "Jergon": fit(class "htest")
## works "lm"
setClass("Jergon", representation(am="lm"))
[1] "Jergon"
Odpowiedz
Wynik ks.test
jest (z dokumentacją):
lista z klasą "htest"
Tak, rzeczywiście "htest"
nie jest formalny klasy zdefiniowane w pakiecie , ale po prostu atrybut klasy listy zwróconej przez ks.test
jest ustawiony na "htest"
.
Aby dać przykład, również kod does't pracę (bo myclass
nie jest formalnym klasa):
obj = list(foo=123)
class(obj) <- "myclass"
class(obj)
[1] "myclass"
setClass("Jergon", representation(foo="myclass"))
[1] "Jergon"
Warning message:
undefined slot classes in definition of "Jergon": foo(class "myclass")
Aby sprawdzić, czy klasa jest formalnie zdefiniowane (i mogą być wykorzystane jako reprezentacja), można użyć getClassDef
, tj:
> getClassDef('htest')
NULL
> getClassDef('lm')
Virtual Class "lm" [package "methods"]
Slots:
Name: .S3Class
Class: character
Extends: "oldClass"
Known Subclasses:
Class "mlm", directly
Class "aov", directly
Class "glm", directly
Class "maov", by class "mlm", distance 2
Class "glm.null", by class "glm", distance 2
EDIT:
Jak słusznie zauważył @Martin Morgan, możesz oficjalnie zarejestrować starą klasę S3 przy użyciu setOldClass
. W rzeczywistości dokumentacja mówi:
Zarejestruj klasę staroświecką (a.k.a. "S3") jako formalnie zdefiniowaną klasę. Argumenty Klasy to wektor znaków używany jako atrybut klasy ; w szczególności, jeśli istnieje więcej niż jeden ciąg znaków, dziedziczenie klas starego stylu jest naśladowane. Rejestracja za pomocą setOldClass pozwala klasom S3 pojawiać się w podpisach metod, jako boks w klasie S4 lub jako nadklasa klasy S4.
Stąd ten kod działa poprawnie:
> setOldClass("htest")
> setClass("Jergon", representation(fit="htest"))
[1] "Jergon"
- 1. Dlaczego operatorzy czasami są samodzielni, a czasami są metodami klasy?
- 2. Dlaczego publiczna ref w definicji klasy C++
- 3. Przykład użycia klasy S3 w obiekcie S4
- 4. Dlaczego funkcja statycznego elementu może być zadeklarowana jako statyczna w definicji klasy, a nie w jej własnej definicji?
- 5. Dlaczego nie mogę przekazać elementu typu klasy jako parametru szablonu?
- 6. Dlaczego nie mogę przechowywać instancji klasy PHP jako zmiennej SESJI
- 7. Dlaczego drukowanie klasy S4 wywołuje `show` bez nazwaprzestrzeni?
- 8. R równoległy błąd klasy S4 klastra
- 9. Dlaczego upośledzenie klasy actionscript3.0 kończy się niepowodzeniem (czasami)?
- 10. dlaczego nie ustawić/getHeader w klasie żądania i odpowiedzi Symfony2
- 11. Czy mogę zadeklarować ciąg w pliku nagłówkowym w definicji klasy?
- 12. dlaczego nie możemy zadeklarować obiektu klasy w tej samej klasie?
- 13. Metoda klasy CopyPicture nie powiodła się - czasami
- 14. Zastosowanie S3 wirtualne klasy jako szczeliny klasy S4, dostaje błąd: got klasa „S4”, powinno być lub rozszerzyć klasę „nls.lm”
- 15. sizeof (* this) w definicji klasy
- 16. PHP: "użyj" wewnątrz definicji klasy
- 17. Dlaczego Spring @Configurable czasami działa, a czasami nie?
- 18. Dlaczego nie mogę mieć nieintegralnego elementu stałej stałej w klasie?
- 19. Dlaczego nie mogę używać klasy IComparable <T> w klasie przodków i porównywać klas potomnych?
- 20. Python nazwa klasy w klasie body
- 21. dlaczego debugowanie firebuga czasami działa, a czasami nie?
- 22. Ruby: wyraźne określenie zakresu w definicji klasy
- 23. Konstruktor szablonów w klasie szablonu musi być zdefiniowany w definicji klasy?
- 24. Definiowanie dekoratora w klasie, który jest również możliwy do usunięcia w definicji klasy.
- 25. suma obiektów S4 R
- 26. Duplikat błędu definicji klasy
- 27. Dlaczego nie można ustawić rodzica QObject w klasie, której QObject jest tylko pośrednią podstawą?
- 28. Klasy S4: Wiele typów na szczelinę
- 29. Dlaczego nie mogę zrobić w tej klasie zainicjowany `const const std :: string` element statyczny
- 30. Jak zdefiniować operatorów podzbiorów dla klasy S4?
Nicea odpowiedź; 'setOldClass (" htest ")' mówi systemowi klasy formalnej (S4), że chcesz traktować obiekt z atrybutem klasy 'htest' (klasa S3) jako klasą S4. –
@MartinMorgan: dobry punkt, dodany do pytania. – digEmAll