Ai đó có thể giải thích tại sao quá tải một toán tử trên lớp S3 cũ được đăng ký không hoạt động như mong đợi khi xác định lớp mới và quá tải toán tử công việc.toán tử quá tải khi sử dụng setOldClass không hoạt động như mong muốn so với lớp S4
Như minh họa trong các ví dụ sau.
Điều này không có tác dụng.
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
Nhưng tính năng này hoạt động.
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