Как установить атрибуты для переменной в R?
Как назначить атрибут переменной? Для EG.
> x <- rpart(f.la, mydata)
присваивает атрибуты:
$names
[1] "frame" "where"
[3] "call" "terms"
[5] "cptable" "method"
[7] "parms" "control"
[9] "functions" "numresp"
[11] "splits" "variable.importance"
[13] "y" "ordered"
$xlevels
named list()
$ylevels
[1] "cancelled" "cart-abandon" "purchased" "returned"
$class
[1] "rpart"
Как это, я хочу создать атрибуты для переменной и присвоить ей значение этого атрибута.
2 ответов
помимо использования attributes
(см. ответ @CathG) можно использовать attr
. Первый будет работать на NULL
объекты, но второй не будет. Когда вы работаете с атрибутами R, вы должны помнить, что они не так просты, как выглядят, и могут иметь некоторые интересные побочные эффекты. Быстрый пример:
> x <- 1:10
> class(x)
[1] "integer"
> x
[1] 1 2 3 4 5 6 7 8 9 10
пока все хорошо. Теперь давайте установим dim
атрибут
> attr(x, 'dim') <- c(2, 5)
> class(x)
[1] "matrix"
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
class
атрибут является фундаментальной частью S3 классы:
> foo <- list()
> foo
list()
давайте посмотрим, что произойдет, если мы ставим атрибут class
как 'data.frame'
> attr(foo, 'class') <- 'data.frame'
> foo
data frame with 0 columns and 0 rows
или мы можем определить пользовательское поведение (кстати, это поведение является причиной, почему лучше избегать точек при определении функций):
> print.foo <- function(x) cat("I'm foo\n")
> attr(foo, 'class') <- 'foo'
> foo
I'm foo
другие атрибуты, такие как comment
и names
имеют также особое значение и ограничения.
Уберите сообщение Вот вам придется немного поосторожнее при работе с атрибутами в R. одна простая идея как дело в том, чтобы использовать префиксы в качестве искусственных пространств имен:
> x <- 1:10
> attr(x, 'zero323.dim') <- c(2, 5)
> class(x)
[1] "integer"
> x
[1] 1 2 3 4 5 6 7 8 9 10
attr(, 'zero323.dim')
[1] 2 5
на мой взгляд, это особенно полезно, когда вы используете сторонние библиотеки. Использование атрибутов обычно плохо документировано, особенно при использовании для некоторых внутренних задач, и довольно легко ввести некоторые труднодиагностируемые ошибки, если вы используете конфликтующие имена.
Если у вас есть переменная :
x<-"some variable"
можно сделать
attributes(x)$myattrib<-"someattributes"
> x
[1] "some variable"
attr(,"myattrib")
[1] "someattributes"
или
> attributes(x)
$myattrib
[1] "someattributes"