我怀疑我不理解R中setRefClass
的所有方面。让我说我有setRefClass
初始化的实例。我想创建变量X
,以便此变量等于实例的副本或引用setRefClass
的实例。
是否有区别:
x = InstanceOfsetRefClass
和
x <<- InstanceOfsetRefClass
我不完全理解,似乎我的代码中有一些奇怪的行为。
感谢您的帮助
答案 0 :(得分:2)
我不认为你的问题与引用类有关,而是与范围有关。请考虑以下示例。我们首先从工作区中删除所有变量,然后为A
创建一个定义:
rm(list=ls())
A = setRefClass("A", fields=list(x="numeric"))
接下来,我们创建并调用函数f
:
f = function() {
x1 = 1
a1 = A$new(x=10)
x2 <<- 2
a2 <<- A$new(x=10)
}
f()
<<-
和=
之间的主要区别是
运营商'&lt;&lt; - &'和' - &gt;&gt;'通常只用于函数,和 导致搜索通过父环境进行搜索 被分配的变量的定义。如果这样的变量是 找到(并且其绑定未锁定)然后重新定义其值, 否则,分配将在全球环境中进行。
在帮助页面中:?“&lt;&lt; - ”
因此,在全球环境中找不到使用=
创建的变量
R> x1
Error: object 'x1' not found
R> a1
Error: object 'a1' not found
但其他变量是:
R> x2
[1] 2
R> a2
Reference class object of class "A"
Field "x":
[1] 10