我来自C ++背景,我正在尝试学习R.当我想要一个对象使用C ++类跟踪另一个已经存在的对象时,我只想添加一个指针成员。我知道R默认情况下不支持指针,但我需要将这个功能添加到我的引用类中。
在C ++中我会做类似
的事情class foo
{
public:
foo *pAnotherFoo;
}
如果我尝试做类似的事情
foo <- setRefClass( "foo", fields = list(another = "foo") )
我显然得到Error: evaluation nested too deeply: infinite recursion....
,因为R试图实例化对象,将实例化另一个对象等等(我认为?)。
我想知道是否有某种方法告诉R我不希望该字段被实例化,我稍后会为其分配一个值。
答案 0 :(得分:0)
看来你在R中使用引用类。如果是这样,你可以简单地定义
foo <- setRefClass('foo',
fields = list(anotherObject = 'ANY'))
我确定你可以猜到,不强制anotherObject
属于foo
类,但没有理由你不能将此值设置为类foo
的对象。实际上,这样做会加快性能(否则,您的对象将检查另一个对象的类您的对象被更改的每个时间)。因此,您可以通过
myObj1 <- new('foo')
myObj2 <- new('foo')
myObj1$anotherObject <- myObj2
为了说明参考行为,请考虑
myObj1$anotherObject$anotherObject <- 1
myObj2$anotherObject
[1] 2