我是否遗漏了这个 R 函数中的某些内容(从因子转换为向量,然后再转换回因子)

Am I missing something in this R function (converts from factor to vector and then converts back to factor)

我正在维护一些 R 代码,并且我正在研究这个函数,它基本上似乎在 as.vector() 上做同样的工作,但它是以一种非常模糊的方式进行的。

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

并且该函数的一种用法似乎只是不必要地调用它。

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

我对 R 还是很陌生,所以我只是想知道我是否遗漏了一些我没有意识到的微妙之处。但是表面上看作者好像并没有真正理解他们在做什么,可能是盲目的复制粘贴。

这将重新排序您的因子水平并删除缺失的水平:

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