Добавление атрибутов, определенных с помощью к объектам R, позволяет легко переносить некоторую дополнительную информацию, склеенную вместе с объектом, представляющим интерес. Проблема в том, что он слегка изменяет то, как R видит объекты, например. числовой вектор с дополнительным атрибутом по-прежнему равен numeric
, но уже не vector
:
x <- rnorm(100)
class(x)
## [1] "numeric"
is.numeric(x)
## [1] TRUE
is.vector(x)
## [1] TRUE
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
attr(x, "foo") <- "this is my attribute"
class(x)
## [1] "numeric"
is.numeric(x)
## [1] TRUE
is.vector(x)
## [1] FALSE # <-- here!
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
Может ли это привести к любым потенциальным проблемам? Я думаю о добавлении некоторых атрибутов к общим объектам R, а затем передаче их другим методам. Каков риск чего-то взлома только из-за того, что я добавил дополнительные атрибуты к стандартным объектам R (например, вектор, матрица, data.frame и т.д.)?
Обратите внимание, что я не спрашиваю о создании моих собственных классов. Для простоты мы также можем предположить, что конфликтов имен в именах атрибутов не будет (например, с использованием атрибута dims
). Предположим также, что это не проблема, если какой-либо метод в какой-то момент отбросит мой атрибут, это приемлемый риск.