2012-04-26 4 views
1

RでS4クラスの作成に関連する質問があります。 "setClass"関数には、作成されたクラスのメタデータ を格納する場所を指定する名前付き属性 "where"があります。マニュアルに。R:クラスメタデータロケーション

例えば、私は次のよう

> en <- new.env(parent=emptyenv()) 
> setClass("A", representation(x="numeric"), where=en) 
[1] "A" 
Warning message: 
In getPackageName(where) : 
    Created a package name, "2012-04-26 12:56:39", when none found 

を行う場合は、私は

> rm(en) 

を使用してエン削除することができ、まだクラスを使用することができています

> new("A", x=1) 
An object of class "A" 
Slot "x": 
[1] 1 

なぜですか?


事前のおかげで、

スヴェン

答えて

1

は、メソッドのパッケージには、多分、効率(クラスルックアップ)の理由から、methods:::.classTableでクラス定義をキャッシュします。 removeClass("A", where=en)は、キャッシュされたバージョンと定義の両方を削除します(ただし、偽の警告を生成します)。

+0

ありがとうございます;) –