通过其内存地址获取对象

use*_*927 6 memory r

我试图找到在R中制作链接列表的方法.

我发现tracemem()返回一个对象的内存地址,所以有什么方法可以通过它的内存地址找到一个对象?

Spa*_*man 6

这不是做到这一点的方法.如果您想要引用,请使用引用类或环境.像这样:

首先,我要在链表中放入三个对象:

> e1=new.env()
> e2=new.env()
> e3=new.env()
Run Code Online (Sandbox Code Playgroud)

使用数据项和指向列表中下一个的指针进行初始化

> with(e1,{data=99;nextElem=e2})
> with(e2,{data=100;nextElem=e3})
> with(e3,{data=1011;nextElem=NA})
Run Code Online (Sandbox Code Playgroud)

现在,给定环境的函数返回链表中的下一个:

> nextElem = function(e){with(e,nextElem)}
Run Code Online (Sandbox Code Playgroud)

所以让我们从一些环境开始e:

> e=e1
> with(e,data)
[1] 99
Run Code Online (Sandbox Code Playgroud)

要获取列表中下一个项目的值:

> with(nextElem(e),data)
[1] 100
Run Code Online (Sandbox Code Playgroud)

并且只是为了通过引用证明事情已经完成,让我们改变e2:

> with(e2,{data=555})
Run Code Online (Sandbox Code Playgroud)

并且下一个项目e也发生了变化:

> with(nextElem(e),data)
[1] 555
Run Code Online (Sandbox Code Playgroud)

参考类应该使它更清洁,但需要一些规划.

试图通过内存位置获取R对象是行不通的.