在回答另一个问题时,@ Marek发布了以下解决方案: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)
)
产生的输出:
[1] Generic Generic Bayer Bayer Advil Tylenol Generic Advil Bayer Generic Advil Generic Advil Tylenol
[15] Generic Bayer Generic Advil Bayer Bayer
这只是矢量的打印输出,因此要存储它,您可能会更加困惑:
res <- `levels<-`(
factor(dat$product),
list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
)
显然,这是对level函数的某种调用,但是我不知道在这里正在做什么。这种魔术的术语是什么,我如何在这方面增加我的魔法能力?
structure(...)
构造的原因有什么,而不仅仅是data.frame(product = c(11L, 11L, ..., 8L))
?(如果那里发生了一些魔术,我也想使用它!)
"levels<-"
函数的调用:function (x, value) .Primitive("levels<-")
,有点像是X %in% Y
的缩写"%in%"(X, Y)
。
names<-
和[<-
。