Ответ 1
Я бы написал метод для [
или subset()
(в зависимости от того, как вы выполняете подмножество) и организуйте для этого сохранение атрибутов. Для этого потребуется атрибут "class"
, который также добавляется к вашему вектору, чтобы произошла отправка.
vec <- 1:10
attr(vec, "someattr") <- "Hello World"
class(vec) <- "foo"
В этот момент подмножество удаляет атрибуты:
> vec[1:5]
[1] 1 2 3 4 5
Если добавить метод [.foo
, мы можем сохранить атрибуты:
`[.foo` <- function(x, i, ...) {
attrs <- attributes(x)
out <- unclass(x)
out <- out[i]
attributes(out) <- attrs
out
}
Теперь желаемое поведение сохраняется
> vec[1:5]
[1] 1 2 3 4 5
attr(,"someattr")
[1] "Hello World"
attr(,"class")
[1] "foo"
И ответ на вопрос о бонусе:
От ?"["
в разделе сведений:
Подмножество (кроме пустого индекса) приведет к удалению всех атрибутов, кроме имен, тусклых и dimnames.