Czy ktoś może wyjaśnić, dlaczego przeciążenie operatora w starej klasie S3, która jest zarejestrowana, nie działa zgodnie z oczekiwaniami, podczas definiowania nowej klasy i przeciążania operatorów praca.przeciążanie operatorów, gdy setOldClass nie działa zgodnie z oczekiwaniami w porównaniu do klasy S4
Jak pokazano w poniższych przykładach.
To nie działa.
require(ff)
setOldClass(Classes=c("ff_vector"))
setMethod(
f="*",
signature = signature(e1 = c("ff_vector"), e2 = c("ff_vector")),
definition = function (e1, e2){
print("S3 setOldClass")
e1[] * e2[]
}
)
ff(1:10) * ff(1:10)
Error in ff(1:10) * ff(1:10) : non-numeric argument to binary operator
Ale to działa.
setClass("myff_vector", representation(x="ff_vector"))
setMethod(
f="*",
signature = signature(e1 = c("myff_vector"), e2 = c("myff_vector")),
definition = function (e1, e2){
print("S4 setOldClass")
[email protected][] * [email protected][]
}
)
new("myff_vector", x = ff(1:10)) * new("myff_vector", x = ff(1:10))
[1] "S4 setOldClass"
[1] 1 4 9 16 25 36 49 64 81 100