【发布时间】:2022-01-02 14:21:52
【问题描述】:
如何重载R 中的矩阵乘法运算符?我已经能够使用大多数其他运算符(使用 Ops)来做到这一点,但是使用矩阵运算我得到了这个错误:
requires numeric/complex matrix/vector arguments
这是一个最小的工作示例:
speed = function(x){
structure(list(y = x),
class = "speed")
}
m = matrix(c(1,2,3,4), ncol = 2)
s = speed(m)
# Addition works fine
`+.speed` = function(e1, e2){ e1$y + e2 }
s + 10
# But matrix multiplication doesn't
`%*%.speed` = function(e1, e2){ e1$y %*% e2 }
s %*% c(1,2)
【问题讨论】:
-
如果'speed'是一个类,那么你不想定义'speed'函数。你可以考虑定义一个 as.speed 函数。
-
@42- 感谢反馈。更改构造函数的名称似乎并没有改变行为。
-
请注意,`%*%.speed`(s, c(1,2)) 确实有效。我对重载
Primitives 不够熟悉,不知道如何使其工作。 -
@42- 我不同意,最好让构造函数反映类名(视情况而定)。
-
@KonradRudolph 好的,并承认
matrix和list是我主张的很好的 R 反例。
标签: r class matrix operator-overloading