R中矩阵的就地修改

R中矩阵的就地修改,r,matrix,data.table,copy-on-write,R,Matrix,Data.table,Copy On Write,我有没有办法避免对R中的矩阵进行就地修改时进行复制 我试图将一个较小的矩阵复制到一个较大矩阵的切片上,如下所示 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" 库(data.table) y我使用运行在Windows

我有没有办法避免对
R
中的矩阵进行就地修改时进行复制

我试图将一个较小的矩阵复制到一个较大矩阵的切片上,如下所示

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"
库(data.table)

y我使用运行在Windows 8.1上的RStudio 0.99.441中的R3.2.0和使用
pryr::address
获得与OP相同的行为。问题是RStudio的环境窗格引用了y。通常情况下,有一些关于这方面的优秀文档

我认为在全球环境中,除了不使用RStudio之外,没有任何方法可以解决矩阵的问题。我试过其他一些方法。函数中的矩阵很好:

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))
}

它在我的comp上返回相同的地址(前缀为“0x”)。当我使用data.table包或pryr包中的
address
尝试上述命令时,我得到了上述两个实例的相同地址。建议您尝试更新版本的R。还请提供包括库调用在内的自包含代码示例。使用
data.table::address
,我得到了与OP相同的行为(R 3.2.0,RStudio 0.99.441,Windows 8.0,data.table 1,9,5)。但是,对于R控制台,它返回相同的地址。所以,问题在于RStudio。
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)