This is most likely due to the fact that factors are not vectors:
reviews <- factor(c("Good", "OK", "Good", "Perfect", "Bad", "Perfect", "Good"), levels=c("Bad", "OK", "Good", "Perfect"), ordered=TRUE) is.vector(reviews)
Inside, factor factors are stored as an integer vector with some structure defined above:
unclass(reviews) ## [1] 3 2 3 4 1 4 3 ## attr(,"levels") ## [1] "Bad" "OK" "Good" "Perfect"
In some cases, this structure will collapse, and you will only have an integer representation. I think your example is one such case, several others:
c(reviews[3], reviews[4]) ## [1] 3 4 ifelse(TRUE, reviews[1], reviews[2]) ## [1] 3
source share