В дополнение к моему комментарию выше, я думаю, что есть неправильное понимание того, что @
делает в контексте объектов S4.
Давайте создадим новый Person
класс
setClass(
"Person",
representation(
name = "character",
other_info = "list"))
и определите экземпляр согласно вашему примеру
jack <- new("Person", name = "Jack", other_info = list(age = 30, gender = "male"))
Обратите внимание, что jack
имеет два слота, к которым можно получить доступ с помощью оператора @
;у нас есть jack@name
(к которому также можно получить доступ с помощью slot(jack, "name")
) и jack@other_info
(или slot(jack, "other_info")
).
Для доступа к конкретным данным в определенных слотах используется OOP-путь kinda-sorta (см. @ Комментарий HongOoi) будет определять метод доступа
setGeneric("get_age", function(object) standardGeneric("get_age"))
setMethod("get_age", signature(object = "Person"), function(object) object@other_info$age)
Тогда мы можем сделать
get_age(jack)
#[1] 30