1

setRefClassRのすべての側面を理解していないのではないかと思いsetRefClassます。初期化されたインスタンスがあるとしましょう。Xこの変数がインスタンスのコピーと等しくなるように、またはのインスタンスを参照するように変数を作成したいと思いますsetRefClass。違いはありますか?

x = InstanceOfsetRefClass

x <<- InstanceOfsetRefClass

完全には理解しておらず、コードに奇妙な動作があるようです。

ご協力いただきありがとうございます

4

1 に答える 1

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()

<<-との主な違い=

演算子'<<-'および'->>'は通常、関数でのみ使用され、割り当てられている変数の既存の定義を親環境で検索します。そのような変数が見つかった場合(およびそのバインディングがロックされていない場合)、その値が再定義されます。それ以外の場合、割り当てはグローバル環境で行われます。

ヘルプページから:? "<<-"

したがって、を使用して作成された変数=は、グローバル環境では見つかりません

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
于 2013-03-21T10:33:52.513 に答える