Sys.setlocale: запрос на установку языкового стандарта ... не может быть выполнен - PullRequest
8 голосов
/ 17 марта 2011

Я использую strptime(...) в функции моего пакета.Мне нужно проанализировать строку с использованием определенных локальных настроек и использовать Sys.setlocale в качестве обходного пути для получения английских настроек локализации.Чтобы уменьшить побочные эффекты, предыдущая локальная настройка восстанавливается впоследствии.Фрагмент основного кода функции выглядит следующим образом:

#parameter settings
sometext <- "Mon, 14 Mar 2011 23:42:16 GMT"
timeFormat <- "%a, %d %b %Y %H:%M:%S"
timeZone <- "GMT"
#get current locale
loc <- Sys.getlocale("LC_TIME")
#set british localization
dummy <- Sys.setlocale("LC_TIME", "en_GB.UTF-8")
#parse datetime string
time <- strptime(sometext, format = timeFormat, tz= timeZone)
#set local back
dummy <- Sys.setlocale("LC_TIME", loc)

К сожалению, мой коллега получает следующее предупреждение при использовании этой функции:

In Sys.setlocale("LC_TIME", "en_GB.UTF-8") :
OS reports request to set locale to "en_GB.UTF-8" cannot be honored

На моем компьютере все работает нормально,Есть ли лучший (и независимый от установленной локализации R) способ выполнения этой задачи?Обычно я хотел бы использовать strptime, поскольку он позволяет очень гибко разбирать строки даты и времени.

Ответы [ 2 ]

11 голосов
/ 18 марта 2011

Я совершенно уверен, что локаль "en_GB.UTF-8" не установлена ​​на компьютере вашего колледжа.Самый простой способ может быть установить его :) Ну, это не тривиально для каждой ОС.

Другой вариант может заключаться в использовании стандартной локали, которую можно найти на каждом компьютере.Поскольку в вашем добавленном примере нет специального формата, вы можете попробовать установить LC_TIME в C, который также работает в Linux и Windows.С этим языком ваш пример будет работать как шарм.См .:

> Sys.setlocale("LC_TIME", "C")
> strptime("Mon, 14 Mar 2011 23:42:16 GMT", format = "%a, %d %b %Y %H:%M:%S", tz="GMT")
[1] "2011-03-14 23:42:16 GMT"

В противном случае вы должны преобразовать свои данные - например: написать короткую функцию для замены всех названий недель и месяцев на стандартные строки и реструктурировать импортированные строки на стандартные.

1 голос
/ 18 марта 2011

Я попробовал ваш код на моей машине с Windows и получил ту же ошибку. Для справки: результаты Sys.getlocale ("LC_TIME"):

> Sys.getlocale("LC_TIME")
[1] "English_United Kingdom.1252"

Я подозреваю, что это может быть довольно стандартная локаль.

Но я также подозреваю, что лучшим способом решения этой проблемы является использование некоторых функций из пакета lubridate, что упрощает работу с датами.

Вы не даете достаточно подробностей в своем вопросе о том, что вы пытаетесь сделать, но я предполагаю, что «sometext» имеет определенный ожидаемый формат, такой как DMY или YMD. Lubridate предоставляет функции для разбора дат в любом указанном формате, например, dmy (), ymd (), mdy () - вы получите картинку.

Если вы предоставите более подробную информацию о вашей реальной проблеме, мы могли бы помочь вам более конкретно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...