将代表扩展到矩阵?
Extending rep to matrices?
如果您在矩阵上调用 rep
,它会重复其元素而不是整个矩阵。传统的修复方法是调用 rep(list(theMatrix),...)
。我想扩展 rep
以便它自动执行此操作。
我尝试使用
rep.matrix<-function(x,...) rep(list(x),...)
确实将 rep.matrix
添加到 methods(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
?我是不是用错了对象系统?
这是不可能的。 , but rep
is an internal generic function, as explained here。这意味着它只会调度到 is.object
returns TRUE
的事物。矩阵不是这样的东西,因此您不能将 rep
扩展到矩阵并将其分派给它们。
如果您在矩阵上调用 rep
,它会重复其元素而不是整个矩阵。传统的修复方法是调用 rep(list(theMatrix),...)
。我想扩展 rep
以便它自动执行此操作。
我尝试使用
rep.matrix<-function(x,...) rep(list(x),...)
确实将 rep.matrix
添加到 methods(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
?我是不是用错了对象系统?
这是不可能的。 rep
is an internal generic function, as explained here。这意味着它只会调度到 is.object
returns TRUE
的事物。矩阵不是这样的东西,因此您不能将 rep
扩展到矩阵并将其分派给它们。