首页 > 解决方案 > 为什么对象的地址每次都在r中改变

问题描述

我在 rstudio 中执行以下命令,每次都得到不同的地址(对于对象的一部分)。你能帮助我吗?

谢谢

require(lobstr)
x <- list(1, 2, 3)
ref(x[1])

标签: rlistobject

解决方案


根据list

列表被逐个元素地复制到配对列表中,列表的名称用作配对列表的标签:其他类型参数的返回值未记录。

由于这些是逐个元素的copy,因此地址是不同的。为了理解,只需创建NULL一些length. 最初,它们都具有相同的地址,但是一旦分配了值,它就会被复制,因此地址会发生变化

library(lobstr)
x1 <- vector('list', 3)
sapply(x1, ref)
#[1] "[1:0x7fc1e00746e0] <NULL>" "[1:0x7fc1e00746e0] <NULL>" "[1:0x7fc1e00746e0] <NULL>"

以上所有显示相同的位置。现在,我们一一赋值,注意地址的变化

x1[[1]] <- 1
sapply(x1, ref)
#[1] "[1:0x7fc162dc10f0] <dbl>"  "[1:0x7fc1e00746e0] <NULL>" "[1:0x7fc1e00746e0] <NULL>"
x1[[2]] <- 2
sapply(x1, ref)
#[1] "[1:0x7fc162dc10f0] <dbl>"  "[1:0x7fc1608c86a8] <dbl>"  "[1:0x7fc1e00746e0] <NULL>"

推荐阅读