2016-08-26 3 views
1

У меня есть вектор, который сортируется по-разному, когда я запускаю код на удаленном сервере Windows против Ubuntu.sort() производит различные результаты в Ubuntu и Windows

Окна:

> u <- getNodes(network) 
> head(u) 
[1] "-1336623650" "-1749477680" "539"   "-1036241023" "6135"    "-44987577" 
> uid <- sort(u) 
> head(uid) 
[1] "-1000019199" "-1000022360" "-1000039153" "-1000044219" "-1000069199" "-1000099640" 

Ubuntu:

> u <- getNodes(network) 
> head(u) 
[1] "-1336623650" "-1749477680" "539"   "-1036241023" "6135" 
[6] "-44987577" 
> uid <- sort(u) 
> head(uid) 
[1] "10"   "100"   "1000"  "10000"  "-1000019199" 
[6] "-1000022360" 

Обе реализации R имеют одинаковые пакеты загружены и ту же версию R (3.3.1). Ubuntu составляет 13.10, а Windows - Windows 7.

+0

Похоже, что версия Ubuntu сортируется по абсолютной величине или игнорирует знак. Есть ли что-нибудь менее негативное, чем «-1000019199» в вашем векторе? – BenPen

+4

Ваш вектор представляется символьной строкой. Если вы конвертируете в числовое число, поведение сортировки должно быть согласованным между операционными системами. – Dave2e

+1

'sessionInfo()' с обеих машин может быть показательным. Сопоставление символов будет зависеть от используемого языка. – joran

ответ

6

Сортировка строк (это то, что вы делаете) в R основана на «локали», которая отличается для систем Windows и Linux. Но будьте осторожны. Никакая локаль не сортирует эти строки в правильном числовом порядке, вам нужно будет отсортировать вектор чисел, если вам нужен порядковый номер.

Возьмите значение Sys.getlocale ("LC_COLLATE") из каждой системы и сравните их. Для моего пакета я делаю ниже в точке входа и сообщаю об этом в пакетеStartupMessage.

collateOrigValue<-Sys.getlocale("LC_COLLATE") 
on.exit(Sys.setlocale("LC_COLLATE",collateOrigValue), add=TRUE) 
Sys.setlocale("LC_COLLATE","C") 

Смотрите также https://stat.ethz.ch/R-manual/R-devel/library/base/html/locales.html

2

Использование stringi::stri_sort или stringr::str_sort для последовательного жала сортировки различных операционных систем.

Смежные вопросы