【发布时间】:2021-05-22 20:48:30
【问题描述】:
如果你在一个矩阵上调用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()中的错误。你应该举报。 -
@user2554330 你是怎么得出这个结论的?
标签: r generics matrix replicate r-s3