即使只有一个名称绑定,向量仍然会被复制

时间:2019-07-17 20:43:35

标签: r

我试图重现Advanced R中有关“复制时修改”主题的示例,并且发现即使在对象上只有一个名称的情况下,仍会创建一个副本。似乎没有就地修改的优化。

    x <- c(1, 2, 3)
    cat(tracemem(x), "\n")
    y <- x
    y[[3]] <- 4L
    y[[3]] <- 5L
    untracemem(x)
    obj_addr(y)

这是我得到的结果:

    <000001E458990360> 
    tracemem[0x000001e458990360 -> 0x000001e458991510]: 
    tracemem[0x000001e458991510 -> 0x000001e458994bd0]: 
    [1] "0x1e458994bd0"

我了解到,当我们第一次更改y的值y [[3]]--4L时,将会创建一个副本,因此将副本设置为tracemem [0x000001e458990360-> 0x000001e458991510]。但是,如果有第3个元素从4更改为5,并且不存在就地修改的话,则不应进行任何复制。

有什么方法可以打开就地修改优化吗?我正在使用R-3.5.3。

0 个答案:

没有答案