Во-первых, создав простой класс S4 (взято из Advanced R ) Хэдли Уикхема
setClass("Person",
slots = c(
name = "character",
age = "numeric"
)
)
Как упоминает @John Paul, вы можете создать несколько и сохранить их в списке
john <- new("Person", name = "John Smith", age = NA_real_)
jane <- new("Person", name = "Jane Smith", age = NA_integer_)
myPeeps <- list(john, jane)
Печать списка
> myPeeps
[[1]]
An object of class "Person"
Slot "name":
[1] "John Smith"
Slot "age":
[1] NA
[[2]]
An object of class "Person"
Slot "name":
[1] "Jane Smith"
Slot "age":
[1] NA
Поскольку data.frame
- это особый тип list
и, как мы видим выше, элемент list
может быть S4
объект, вы можете хранить их в столбце. Вам просто нужно использовать функцию I()
size <- 5
propsToMyPeeps <- data.frame(
propsFrom = I(sample(myPeeps, size, replace = TRUE)),
propsValue = sample.int(10, size, replace = TRUE),
propsTo = I(sample(myPeeps, size, replace = TRUE))
)
По умолчанию метод print
для data.frame
не знает, как привести наш Person
к символьной строке, поэтому печать данных .frame приведет к ошибке. Но если вы установите под столбец, вы увидите, что все объекты там есть.
> print(propsToMyPeeps$propsTo)
[[1]]
An object of class "Person"
Slot "name":
[1] "Jane Smith"
Slot "age":
[1] NA
[[2]]
An object of class "Person"
Slot "name":
[1] "John Smith"
Slot "age":
[1] NA
[[3]]
An object of class "Person"
Slot "name":
[1] "John Smith"
Slot "age":
[1] NA
[[4]]
An object of class "Person"
Slot "name":
[1] "Jane Smith"
Slot "age":
[1] NA
[[5]]
An object of class "Person"
Slot "name":
[1] "Jane Smith"
Slot "age":
[1] NA