不可设置函数的一个示例是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))检索的内容?(这是在较早的关于赋值函数的答案中的切向注释[被标记为],我被要求提出一个问题。因此,这是启发我的机会。)
最佳答案
我认为思考labels
和levels
之间的区别的方法(忽略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/