首页 > 解决方案 > 将代表扩展到矩阵?

问题描述

如果你调用rep一个矩阵,它会重复它的元素而不是整个矩阵。传统的解决方法是调用rep(list(theMatrix),...). 我想扩展rep以便它自动执行此操作。

我试图使用

rep.matrix<-function(x,...) rep(list(x),...)

这确实增加rep.matrixmethods(rep)

> methods(rep)
[1] rep.bibentry*       rep.Date            rep.factor          rep.matrix         
[5] rep.numeric_version rep.POSIXct         rep.POSIXlt         rep.roman*         
see '?methods' for accessing help and source code

但是,在矩阵上调用 rep 似乎并没有发送到rep.matrix.

> rep(diag(5),3)
 [1] 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
[42] 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

虽然直接调用rep.matrix没有错误。

> rep.matrix(diag(5),3)
[[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1

[[3]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1

如果我创建和使用rep.array而不是rep.matrix.

我的错误在哪里?为什么不rep派送rep.matrix?我是否以某种方式使用了错误的对象系统?

标签: rgenericsmatrixreplicater-s3

解决方案


这是无法做到的。关于这个事实,文档并不太公开,而是rep一个内部通用函数,如此所述。这意味着它只会分派给is.object返回的东西TRUE。矩阵不是这样的东西,因此您不能扩展rep到矩阵并将其分派给它们。


推荐阅读