Почему наследование S4 теряется между средами?

Предположим, у меня есть класс MyClass, определенный следующим образом:

setClass(
    "MyClass", 
    slots = c(message = "character"), 
    validity = function(object) { T })

Если я создам его экземпляр, inherits будет работать как положено:

myInstance <- new("MyClass", message = "Hello")

inherits(myInstance, "MyClass")

ПРАВДА

Однако это не работает после того, как я поместил экземпляр в среду и снова вернул его:

e <- new.env(hash = T, parent = emptyenv())

assign("MyInstance", myInstance, envir = e)

inherits(mget("MyInstance", envir = e), "MyClass")

ЛОЖНЫЙ

Но данные все равно есть:

mget("MyInstance", envir = e)

$MyInstance Объект класса "MyClass" Слот "сообщение": [1] "Привет"

Как я могу указать R поддерживать мои классы S4 даже при сохранении и загрузке экземпляров между средами?


person sdgfsdh    schedule 20.04.2015    source источник
comment
ты пробовал mget("MyInstance", envir = e) ? и посмотреть, что возвращается.   -  person Mamoun Benghezal    schedule 20.04.2015


Ответы (1)


mget возвращает именованный список запрошенных объектов. Вы на самом деле изучаете список. Чтобы изучить объект, вам нужно извлечь его из вывода mget. В качестве альтернативы просто используйте get, который возвращает только интересующий объект.

mget полезен при запросе множества объектов, но если вам нужен только один, то get вполне подойдет.

person Dason    schedule 20.04.2015