我有一个与在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
为什么?
提前谢谢,
斯文
答案 0 :(得分:1)
方法包将类定义缓存在methods:::.classTable
中,可能是为了提高效率(查找类)的原因。 removeClass("A", where=en)
将删除缓存版本和定义(虽然生成虚假警告)。