为什么 S4 继承在环境之间丢失?
Why is S4 inheritance lost between environments?
假设我有一个 class MyClass
定义如下:
setClass(
"MyClass",
slots = c(message = "character"),
validity = function(object) { T })
如果我创建它的一个实例,inherits
会按预期工作:
myInstance <- new("MyClass", message = "Hello")
inherits(myInstance, "MyClass")
TRUE
然而,我将实例放入环境并再次将其带回来后它不起作用:
e <- new.env(hash = T, parent = emptyenv())
assign("MyInstance", myInstance, envir = e)
inherits(mget("MyInstance", envir = e), "MyClass")
FALSE
但是数据还在:
mget("MyInstance", envir = e)
$MyInstance
An object of class "MyClass"
Slot "message":
[1] "Hello"
即使在环境之间保存和加载实例时,我如何告诉 R 维护我的 S4 classes?
mget
returns 所请求对象的命名列表。您实际上是在检查列表。要检查对象,您需要从 mget
的输出中提取它。或者只使用 get
其中 returns 只是感兴趣的对象。
mget
在请求一堆对象时很有用,但如果你只想要一个,那么 get
就可以了。
假设我有一个 class MyClass
定义如下:
setClass(
"MyClass",
slots = c(message = "character"),
validity = function(object) { T })
如果我创建它的一个实例,inherits
会按预期工作:
myInstance <- new("MyClass", message = "Hello")
inherits(myInstance, "MyClass")
TRUE
然而,我将实例放入环境并再次将其带回来后它不起作用:
e <- new.env(hash = T, parent = emptyenv())
assign("MyInstance", myInstance, envir = e)
inherits(mget("MyInstance", envir = e), "MyClass")
FALSE
但是数据还在:
mget("MyInstance", envir = e)
$MyInstance An object of class "MyClass" Slot "message": [1] "Hello"
即使在环境之间保存和加载实例时,我如何告诉 R 维护我的 S4 classes?
mget
returns 所请求对象的命名列表。您实际上是在检查列表。要检查对象,您需要从 mget
的输出中提取它。或者只使用 get
其中 returns 只是感兴趣的对象。
mget
在请求一堆对象时很有用,但如果你只想要一个,那么 get
就可以了。