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

我可以删除 en 使用

> 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 回答