我有一个与在 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
我可以删除 en 使用
> rm(en)
并且我仍然可以使用该类,例如
> new("A", x=1)
An object of class "A"
Slot "x":
[1] 1
为什么?
提前感谢,
斯文
方法包将类定义缓存在methods:::.classTable
中,可能是出于效率(类查找)的原因。 removeClass("A", where=en)
将删除缓存的版本和定义(尽管会生成虚假警告)。