【问题标题】:Extending rep to matrices?将代表扩展到矩阵?
【发布时间】: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


【解决方案1】:

这是无法做到的。 The documentation is not too forthcoming about this fact,但rep 是一个内部 泛型函数,如here 所述。这意味着它只会分派给is.object 返回TRUE 的东西。矩阵不是这样的东西,因此您不能将rep 扩展到矩阵并将其分派给它们。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2014-07-19
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多