Почему упорядоченный вектор не всегда упорядочен согласно is.ordered в R?

Я предполагаю, что это связано с уровнями и факторами, но я не уверен, что именно происходит:

test <- c(1,4,2,3,7,9,8)
testOrdered <- test[order(test)]
is.ordered(testOrdered)
is.ordered(rev(testOrdered))

Оба раза функция возвращает FALSE, т.е. ни один из векторов не упорядочен. Сначала я ожидал, что функция проверит, упорядочен ли данный вектор в смысле «порядка», то есть «отсортирован». Вернувшись к определению is.sorted, я предполагаю, что is.ordered спрашивает, упорядочен ли данный вектор в порядке его уровней. В векторном тесте (насколько я понимаю) не должно быть уровней, да? Итак, «false» - более или менее правильный ответ, я думаю (но NaN было бы лучше?). Может ли кто-нибудь а) помочь мне понять, что действительно делает is.ordered и когда это будет правдой и б) как проверить, отсортирован / упорядочен ли числовой вектор?


person networker    schedule 26.01.2014    source источник
comment
Относительно б) см. is.unsorted, который находится в разделе "См. Также" ?sort   -  person GSee    schedule 26.01.2014


Ответы (1)


В R существуют два типа факторов: неупорядоченный и упорядоченный. В вашем случае у вас простой числовой вектор, а не фактор. Следовательно, функция is.ordered не применяется, как указано выше.

Неупорядоченный фактор - это то, что часто называют категориальными данными, он не имеет естественного порядка. Чтобы представить это в R, вы можете использовать неупорядоченный множитель:

f <- factor(c(1,3,2,1,3))
f
[1] 1 3 2 1 3
Levels: 1 2 3

is.ordered(f)
[1] FALSE

Если факторы имеют естественный порядок, часто называемый порядковыми или упорядоченными категориальными данными, вы можете определить это в R с помощью упорядоченного фактора. Обратите внимание на знак < на уровнях упорядоченного фактора.

f <- factor(c(1,3,2,1,3), ordered=TRUE)
f
[1] 1 3 2 1 3
Levels: 1 < 2 < 3

is.ordered(f)
[1] TRUE

Итак, is.ordered будет различать эти два типа факторов.

person Mark Heckmann    schedule 26.01.2014