【发布时间】:2018-08-07 19:15:37
【问题描述】:
我对“高级 R”(https://adv-r.hadley.nz/names-values.html)第 3.36 节中的问题 4 有点困惑。我链接到的章节解释了我在附加的图像中使用的约定。我将简要总结一下。对于那些不熟悉这本书的人和那些不想点击链接并阅读作者对与我相似的图表的描述的人,我在下面的图片中添加了对我使用的约定的简要说明这篇文章。
当您运行此代码时会发生什么?画一幅画
x <- list(1:10)
x[[2]] <- x
我了解这里正在创建什么。 x <- list(1:10) 创建一个列表。该列表有一个元素指向向量 1:10。 x[[2]] <- x 运行后,x 指向一个包含两个元素的列表。第一个元素指向一个向量 1:10。第二个元素是对与原始列表相同的列表的引用(或者它可能不仅与原始列表相同,而且实际上是原始列表?)。我只是对新列表中正在复制和/或引用哪些对象(不是变量、对象)感到困惑。
这是一个解决方案的尝试。
在刚刚运行x <- list(1:10) 之后,名称 x 被绑定到一个列表对象。该列表有一个引用,即向量 (1:10)。
这就是我感到困惑的地方。我不确定执行x[[2]] <- x 时会发生什么。这是我最好的猜测,我认为这是错误的。当x[[2]] <- x 被执行时,x 最初绑定到的对象的副本被制作。对于该副本,将创建指向原始对象的第二个元素。
我假设我对x[[2]] <- x 执行时发生的情况的解释是不正确的。如果是这样,有人可以帮助我了解发生了什么吗?如果我碰巧是正确的,有人可以帮助解释为什么我是正确的吗?
在我使用的图像中,圆角正方形代表名称/变量。黑色箭头是从名称到对象的绑定(与 R 中的赋值箭头指向的方向相反)。下面的矩形代表里面有绿色圆圈时的列表。绿色圆圈代表列表的一个元素。由于列表元素是对对象的引用,因此绿色箭头指向列表元素所引用的对象。
在第一张图片中,列表有一个元素,该元素指向向量 1:10。
在第二张图片中,列表对象的第一个元素指向向量 1:10。第二个元素是对列表的引用。
【问题讨论】: