Si vous appelez rep sur une matrice, il répète ses éléments plutôt que la matrice entière. La solution traditionnelle consiste à appeler rep(list(theMatrix),...). Je veux étendre rep pour qu'il le fasse automatiquement.

J'ai essayé d'utiliser

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

Qui a effectivement ajouté 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

Cependant, l'appel du représentant sur une matrice ne semble pas être envoyé à 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

Bien que les appels directs à rep.matrix aient fonctionné sans erreur.

> 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

J'obtiens les mêmes résultats si je crée et utilise rep.array au lieu de rep.matrix.

Où est mon erreur? Pourquoi rep n'est-il pas envoyé vers rep.matrix? Ai-je utilisé le mauvais système d'objets d'une manière ou d'une autre?

2
J. Mini 19 févr. 2021 à 23:42

1 réponse

Meilleure réponse

Cela ne peut pas être fait. La documentation n'est pas trop claire sur ce fait, mais rep est un interne fonction générique, comme expliqué ici . Cela signifie qu'il ne sera envoyé qu'aux objets où is.object renvoie TRUE. Les matrices ne sont pas une telle chose, donc vous ne pouvez pas étendre rep aux matrices et le leur envoyer.

2
J. Mini 11 mars 2021 à 19:25