Esta no es una respuesta adecuada, pero puede ser un buen lugar para tener esta discusión y entender el funcionamiento interno de R. Este tipo de error se ha deslizado antes en otro paquete que estaba usando.
En primer lugar, cabe destacar que simplemente asignar la matriz a una nueva variable primero no ayuda:
> A <- B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r1 <- A %^% 5
> A
[,1] [,2] [,3]
[1,] 691 1926 312
[2,] 2331 6502 1056
[3,] 1116 3108 505
> B
[,1] [,2] [,3]
[1,] 691 1926 312
[2,] 2331 6502 1056
[3,] 1116 3108 505
Mi conjetura es que R está tratando de ser inteligente que pasa por referencia en lugar de valores. Para lograr que esto funcione, debe hacer algo para diferenciar A de B:
`%m%` <- function(x, k) {
tmp <- x*1
res <- tmp%^%k
res
}
> B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r2 <- B %m% 5
> B
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 3 8 1
[3,] 0 4 1
¿Cuál es la forma explícita de hacerlo?
Por último, en el código C para el paquete, no es este comentario:
- NB: x se verá alterada!La persona que llama debe hacer una copia si es necesario
Pero no entiendo por qué R permite que el código C/Fortran tenga efectos secundarios en el entorno global.
calcular un% ^% 6 también deja una como (inicial A)% ^% 4. Asignar el resultado a una nueva variable no impide que se modifique mi matriz inicial. –
suena como que simplemente tiene que tomar el paso inusual de asignar la matriz a una nueva variable primero. – John