如何在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)
答案 0 :(得分:2)
我认为这是因为%*%
默认情况下不是S3通用函数。你可以通过这样做来解决这个问题。
`%*%.default` = .Primitive("%*%") # assign default as current definition
`%*%` = function(x,...){ #make S3
UseMethod("%*%",x)
}
`%*%.speed` = function(e1, e2){ e1$y %*% e2 } # define for speed
s %*% c(1,2)
[,1]
[1,] 7
[2,] 10
如果您想了解有关here
的其他信息,可以查看Hadley的书。根据以下评论编辑。