不可设置函数的一个示例是labels。您只能在使用因子函数创建因子标签时设置它们。没有labels<-函数。并不是说因素中的“标签”和“水平”有意义。

>  fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one   two   three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"

好的,我问了一些标签,可以假定是标签调用所设定的标签,但是我得到的却是相当的……什么是直觉?
> levels(fac)
[1] "one"   "two"   "three"

因此看来,设置标签实际上是在设置级别。
>  fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one"   "two"   "three"

好的,这是预期的。那么当一个水平设置时标签是什么?
>  fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"

怪异的,如果你问我。看来,因子的“标签”参数胜过了水平规范的“水平”参数。为什么会这样呢?似乎是一个困惑的术语。为何labels()返回我原本想用as.character(as.numeric(fac))检索的内容?

(这是在较早的关于赋值函数的答案中的切向注释[被标记为],我被要求提出一个问题。因此,这是启发我的机会。)

最佳答案

我认为思考labelslevels之间的区别的方法(忽略Tommy在他的答案中描述的labels()函数)是levels旨在告诉R在输入中寻找哪些值(x)以及在其中使用什么顺序生成的factor对象的级别,并且labels将在输入已被编码为一个因子之后更改级别的值...如Tommy的答案所建议,factor返回的factor()对象没有被称为labels ...只是通过labels参数...进行了调整的级别...(清除为泥巴)。

例如:

> f <- factor(x=c("a","b","c"),levels=c("c","d","e"))
> f
[1] <NA> <NA> c
Levels: c d e
> str(f)
Factor w/ 3 levels "c","d","e": NA NA 1

由于在x中找不到levels的前两个元素,因此f的前两个元素是NA。因为"d"中包含了"e"levels,所以即使它们不在f中出现,它们也显示在x级别中。

现在使用labels:
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("C","D","E"))
> f
[1] <NA> <NA> C
Levels: C D E

在R弄清楚因子中应该包含什么之后,它会重新编码级别。当然,可以使用它来做一些诸如此类的事情:
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("a","b","c"))
> f
[1] <NA> <NA> a
Levels: a b c

思考levels的另一种方法是factor(x,levels=L1,labels=L2)等效于
f <- factor(x,levels=L1)
levels(f) <- L2

我认为此示例的适当措词版本可能对Pat Burns的R inferno来说是不错的-在8.2节中有很多因素难题,但不是这个特定难题...

关于r - 为什么标记和水平因素中的术语如此怪异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7128413/

10-12 23:29