我正在维护一些R代码而且我正在研究这个函数,它基本上似乎在as.vector()
做了相同的工作但是在一个非常复杂的模糊方法中。
f2v <- function(x) if ( is.factor(x) ) levels(x)[x] else x
该函数的一个用法似乎不必要地调用它。
xx <- as.factor(f2v(x))
我对R还很新鲜,所以我只是想知道我是否在这里错过了一些我未能欣赏的微妙观点。但从表面上看,作者似乎并不真正理解他们在做什么,也许是盲目地复制粘贴的东西。
答案 0 :(得分:2)
这将重新排序您的因素级别并删除丢失的级别:
x <- factor(letters[1:6], levels=rev(letters))
x
# [1] a b c d e f
# Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a
as.factor(f2v(x))
# [1] a b c d e f
# Levels: a b c d e f
as.factor(x)
# [1] a b c d e f
# Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a
虽然这似乎是一种微妙的区别,但它会影响使用因子级别的应用程序(例如ggplot
用于排序分类变量)。随机删除和重新排序因子水平似乎也是一个坏主意。这些级别通常是有意义的,应该适当考虑。