Я пишу класс S3 в R, который представляет собой целое число с некоторыми прикрепленными к нему атрибутами.Если x1 и x2 являются объектами этого класса (назовите его «myclass»), то я бы хотел, чтобы c (x1, x2) возвращал вектор объектов myclass с сохранением исходного определения класса и атрибутов.Однако документированное поведение c () заключается в удалении атрибутов, поэтому мне кажется, что мне нужно написать собственный метод c.myclass ().У меня вопрос, как я могу это сделать?
Пример проблемы:
myclass <- function(x, n) structure(x, class="myclass", n=n)
x1 <- myclass(1, 5)
x2 <- myclass(2, 6)
c(x1, x2)
[1] 1 2
Здесь результатом является просто вектор элементов числового класса, а исходный атрибут nушел.
Глядя на код для различных пакетов, я иногда вижу код, подобный следующему, в котором нам нужно сохранить атрибут класса, но ничего больше:
c.myclass <- function(..., recursive = F) {
structure(c(unlist(lapply(list(...), unclass))), class="myclass")
}
К сожалению, я также не могузаставить это работать.Результатом вызова c.myclass (x1, x2) является вектор, в котором сам вектор имеет класс «myclass», но где каждый элемент в векторе имеет класс numeric;Я действительно хочу, чтобы у каждого элемента в векторе был класс "myclass".На практике мне также потребуется обновить этот метод, чтобы сохранить и другие атрибуты (например, атрибут "n" в myclass).