2012-04-26 51 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

谢谢您的信息;) – 2012-04-26 14:56:33