1

RでのS4クラスの作成に関する質問があります。「setClass」関数には、作成されたクラスのメタデータを格納する場所を定義する名前付き属性「where」があります。

しかし、私が次のことをすると

> 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  

何故ですか?


前もって感謝します、

スヴェン

4

1 に答える 1

1

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

于 2012-04-26T13:01:22.237 に答える