在R中就地修改矩阵

农作物

我有什么方法可以避免对矩阵中的矩阵进行修改时复制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"
尼克·肯尼迪

在Windows 8.1的RStudio 0.99.441中运行R 3.2.0并使用时,我得到与OP相同的行为pryr::address问题是RStudio的“环境”窗格引用了y。通常,Hadley Wickham对此都有一些出色的文档。

我认为除了不使用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))
}

呼叫fn()应显示地址不变。

但是,将y创建为全局环境中的列表或环境的成员并不会阻止写入时的复制(例如x <- new.env(); x$y <- matrix(...))。

有什么办法可以禁用RStudio中的环境窗格?似乎没有任何方法可以禁用环境窗格。

data.table仍然设法避免不必要的复制。尝试:

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章