R中自定义矩阵运算符:如何让+X调用自定义+.matrix方法
自定义矩阵运算符的实现问题
背景
我希望编写一个R包,重载矩阵的+、-、%%运算符,让R能像Matlab一样便捷地进行矩阵快速计算:
- 单目运算
+X计算t(X)(双目运算X+Y保持原有逻辑) - 单目运算
-X计算solve(X)(双目运算X-Y保持原有逻辑) -I(X)计算-XX%%Y计算Y%*%X(乘法按从右到左顺序书写)
包使用示例:
library(mymatrixpackage) X <- matrix(1:6, nrow = 3) y <- matrix(1:3, nrow = 3) +X == t(X) X+X == 2*X # 线性回归系数解(注意:从右到左阅读) y%%+X%%-(X%%+X) == solve(t(X)%*%X)%*%t(X)%*%y
核心问题
对于矩阵X,如何让单目运算+X调度到我自定义的+.matrix函数?目前+X调用的是内部方法,似乎会忽略+.matrix。我认为可能需要用到Ops分组泛型函数。
替代方案
我已通过S3类"tmatrix"成功实现该功能,代码如下:
`+.tmatrix` <- function(X,Y) { if (missing(Y)) { t(X) } else { structure(unclass(X)+unclass(Y), class = oldClass(X)) } }
但不使用S3类会更优,原因如下:
- 需要手动执行
attr(X, "class") <- "tmatrix"来设置类属性 - 许多操作(如
[索引)会丢失X的类属性,因此还需额外重载这些操作
内容的提问来源于stack exchange,提问作者user615536
相关产品推荐
相关产品推荐

