R中S3类的重载矩阵乘法 [英] Overload matrix multiplication for S3 class in R
本文介绍了R中S3类的重载矩阵乘法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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)
推荐答案
我想这是因为%*%
默认情况下不是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
如果您需要有关此内容的更多信息,可以查看Hadley的书here
根据下面的注释进行了编辑。
这篇关于R中S3类的重载矩阵乘法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文