Системный.setlocale: запрос на установку локали ... не может быть выполнен

Я использую 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, поскольку он позволяет очень гибкий способ разбора строк datetime.

2 ответов


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

другим вариантом может быть использование стандартного языка, который можно найти на каждом компьютере. Поскольку в добавленном примере нет специального формата, вы можете попробовать установить LC_TIME to 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"

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


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

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

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

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

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

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