R中S3类的重载矩阵乘法 [英] Overload matrix multiplication for S3 class in R

查看:33
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆