Kann jemand erklären, warum das Überladen eines Operators auf einer alten S3-Klasse, die registriert ist nicht wie erwartet funktioniert, beim Definieren einer neuen Klasse und Überladen der Operatoren Arbeit.Überladen von Operatoren bei Verwendung von setOldClass nicht wie gewünscht funktioniert im Vergleich zu einer S4-Klasse
Wie in den folgenden Beispielen gezeigt.
Dies funktioniert nicht.
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
Aber das funktioniert.
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