studio - plot en r
En lugar modificación de matrices en R (1)
¿Hay alguna forma de evitar copy-on-modify para las modificaciones in situ de matrices en R
?
Estoy tratando de copiar una matriz más pequeña a una rebanada de matriz más grande de la siguiente manera.
library(data.table)
y <- matrix(c(11,21,31,12,22,32),nrow=3,ncol=2)
address(y)
[1] "08429190"
y[2:3,] <- matrix(c(1,1,8,12),nrow=2)
address(y)
[1] "0E033D28"
Obtengo el mismo comportamiento que el OP utilizando R 3.2.0 ejecutando dentro de RStudio 0.99.441 en Windows 8.1 y usando pryr::address
. El problema es que RStudio tiene una referencia a y para su panel de entorno. Como suele ser el caso, Hadley Wickham tiene una excelente documentación de esto.
No creo que haya forma de evitar matrices en el entorno global que no sea usar RStudio. He intentado un par de otras cosas. Las matrices dentro de una función están bien:
library("pryr")
fn <- function() {
y <- matrix(c(11,21,31,12,22,32),nrow=3,ncol=2)
print(address(y))
y[2:3,] <- matrix(c(1,1,8,12),nrow=2)
print(address(y))
}
Llamar a fn()
debería mostrar que la dirección no ha cambiado.
Sin embargo, crear y como miembro de una lista o entorno que se encuentre en el entorno global no impide la copia al escribir (por ejemplo, x <- new.env(); x$y <- matrix(...)
).
¿Hay alguna forma de deshabilitar el panel de entorno en RStudio? no parece haber ninguna forma de deshabilitar el panel de entorno.
data.table
aún se las arregla para evitar copias innecesariamente. Tratar:
library("data.table")
x <- as.data.table(matrix(c(11,21,31,12,22,32),nrow=3,ncol=2))
address(x)
x[2:3, `:=`(V1 = c(1, 1), V2 = c(8, 12))]
address(x)
x[, V3 := V1 + V2]
address(x)