Системный.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 () - вы получаете изображение.
Если вы предоставите более подробную информацию о вашей реальной проблемы, мы могли бы помочь более конкретно.