あなたの問題は参照クラスとは何の関係もないと思います。むしろそれはスコープに関するものです。次の例を考えてみましょう。まず、ワークスペースからすべての変数を削除し、次の定義を作成します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()
<<-
との主な違い=
は
演算子'<<-'および'->>'は通常、関数でのみ使用され、割り当てられている変数の既存の定義を親環境で検索します。そのような変数が見つかった場合(およびそのバインディングがロックされていない場合)、その値が再定義されます。それ以外の場合、割り当てはグローバル環境で行われます。
ヘルプページから:? "<<-"
したがって、を使用して作成された変数=
は、グローバル環境では見つかりません
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