Расширение репутации для матриц?

Если вы вызываете 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? Я как-то использовал неправильную объектную систему?


person J. Mini    schedule 19.02.2021    source источник
comment
Похоже на ошибку в rep(). Вы должны сообщить об этом.   -  person user2554330    schedule 20.02.2021
comment
@ user2554330 Как вы пришли к такому выводу?   -  person J. Mini    schedule 20.02.2021


Ответы (1)


Этого нельзя делать. Документация об этом факте не слишком свежа, но rep является внутренней универсальной функцией, так как объясняется здесь. Это означает, что он будет отправлять только те вещи, где is.object возвращает TRUE. Матрицы не являются такой вещью, поэтому вы не можете расширить rep до матриц и отправить их им.

person J. Mini    schedule 11.03.2021