我在这个R函数中遗漏了什么(从因子转换为向量然后转换回因子)

时间:2015-01-16 21:21:41

标签: r r-factor

我正在维护一些R代码而且我正在研究这个函数,它基本上似乎在as.vector()做了相同的工作但是在一个非常复杂的模糊方法中。

f2v <- function(x) if ( is.factor(x) ) levels(x)[x] else x

该函数的一个用法似乎不必要地调用它。

xx <- as.factor(f2v(x))

我对R还很新鲜,所以我只是想知道我是否在这里错过了一些我未能欣赏的微妙观点。但从表面上看,作者似乎并不真正理解他们在做什么,也许是盲目地复制粘贴的东西。

1 个答案:

答案 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用于排序分类变量)。随机删除和重新排序因子水平似乎也是一个坏主意。这些级别通常是有意义的,应该适当考虑。