An example of a non-settable function would be labels
. You can only set factor labels when they are created with the factor()
function. There is no labels<-
function. Not that 'labels' and 'levels' in factors make any sense....
> fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one two three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"
OK, I asked for labels, which one might assume were as set by the factor call, but I get something quite ... what's the word, unintuitive?
> levels(fac)
[1] "one" "two" "three"
So it appears that setting labels is really setting levels.
> fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one" "two" "three"
OK that is as expected. So what are labels when one sets levels?
> 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"
It would seem that 'labels' arguments for factor()
trump any 'levels' arguments for the specification of levels. Why should this be? And why does labels()
return what I would have imagined to be retrieved with as.character(as.numeric(fac))
?
(This was a tangential comment [labelled as such] in an earlier answer about assignment functions to which I was asked to move to a question. So here's your opportunity to enlighten me.)