Dans une réponse à une autre question, @Marek a publié la solution suivante: 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)
)
Qui produit en sortie:
[1] Generic Generic Bayer Bayer Advil Tylenol Generic Advil Bayer Generic Advil Generic Advil Tylenol
[15] Generic Bayer Generic Advil Bayer Bayer
Ce n'est que l'impression d'un vecteur, donc pour le stocker, vous pouvez faire ce qui est encore plus déroutant:
res <- `levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
Il s'agit clairement d'une sorte d'appel à la fonction des niveaux, mais je n'ai aucune idée de ce qui se fait ici. Quel est le terme pour ce genre de sorcellerie, et comment augmenter ma capacité magique dans ce domaine?
structure(...)
construction au lieu de simplement data.frame(product = c(11L, 11L, ..., 8L))
? (S'il y a de la magie là-bas, j'aimerais aussi la manier!)
"levels<-"
fonction function (x, value) .Primitive("levels<-")
:, un peu comme X %in% Y
est une abréviation pour "%in%"(X, Y)
.
names<-
et[<-
.