Em resposta a outra pergunta, @Marek postou a seguinte solução: https://stackoverflow.com/a/10432263/636656
dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L,
7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, -20L), class = "data.frame")
`levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
Que produz como saída:
[1] Generic Generic Bayer Bayer Advil Tylenol Generic Advil Bayer Generic Advil Generic Advil Tylenol
[15] Generic Bayer Generic Advil Bayer Bayer
Esta é apenas a impressão de um vetor, então, para armazená-lo, você pode fazer o ainda mais confuso:
res <- `levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
Claramente, isso é algum tipo de chamada para a função de níveis, mas não tenho ideia do que está sendo feito aqui. Qual é o termo para esse tipo de feitiçaria e como faço para aumentar minha habilidade mágica neste domínio?
structure(...)
construção em vez de apenas data.frame(product = c(11L, 11L, ..., 8L))
? (Se houver alguma mágica acontecendo lá, eu gostaria de usá-la também!)
"levels<-"
função function (x, value) .Primitive("levels<-")
:, mais ou menos como X %in% Y
é uma abreviatura de "%in%"(X, Y)
.
names<-
e[<-
.