2011-03-17 11 views
7

Estoy usando strptime(...) en función de mi paquete. Necesito analizar una cadena usando configuraciones locales específicas y usé Sys.setlocale como una solución alternativa para obtener la configuración de localización en inglés. Para reducir los efectos secundarios, la configuración local anterior se restablece después. El fragmento de código básico de la función es el siguiente:Sys.setlocale: solicitud para establecer la configuración regional ... no se puede cumplir

#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) 

Por desgracia, un colega mío obtiene la siguiente advertencia al utilizar esta función:

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

En mi computadora todo funciona bien. ¿Existe una forma mejor (e independiente de la localización R instalada) de realizar esta tarea? En general, me gustaría utilizar strptime, ya que permite una manera muy flexible de analizar cadenas de fecha y hora.

Respuesta

8

Estoy seguro de que la configuración regional "en_GB.UTF-8" no está instalada en la computadora de su universidad. La forma más fácil podría ser instalarlo :) Bueno, esto no es trivial con todos los sistemas operativos.

Otra opción podría ser utilizar una configuración regional estándar que se puede encontrar en todas las computadoras. Como su ejemplo agregado no muestra ningún formato especial, puede probar configurando LC_TIME en C, que también funciona en Linux y Windows. Con esa configuración regional, su ejemplo dado funcionará como un encanto. Ver:

> 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" 

O de lo contrario se debe transformar sus datos - por ejemplo .: escribir una función corta para sustituir nombre de todos de semana y meses de cuerdas estándar y reestructurar sus cadenas importadas a los estándar.

+0

He editado la pregunta con un ejemplo de algún texto y formato de hora. como la instalación de configuraciones regionales no es realmente dependiente del sistema operativo, otra opción sería agradable ... – user625626

+0

@ user625626: gracias por la actualización y también por llamar mi atención allí. Revisé mi respuesta y también espero que esto pueda ayudar. – daroczig

+0

jep - funciona en linux Y Windows - ¡muchas gracias! – user625626

1

He intentado su código en mi máquina con Windows y me sale el mismo error. Como referencia, los resultados de Sys.getlocale ("LC_TIME"):

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

Sospecho que esto podría ser un escenario bastante estándar.

Pero también sospecho que la mejor forma de abordar este problema es utilizar algunas de las funciones del paquete lubridate, lo que facilita el trabajo con las fechas.

No proporciona suficientes detalles en su pregunta sobre lo que está intentando hacer, pero supongo que "algún texto" está en un formato específico esperado, como DMY o YMD. Lubridate proporciona funciones para analizar las fechas en cualquier formato especificado, p. dmy(), ymd(), mdy() - obtienes la imagen.

Si proporciona más detalles sobre su problema real, es posible que podamos ayudarlo más específicamente.

+0

lo siento, he editado mi pregunta con un ejemplo de algún texto y formato de hora. Echaré un vistazo a lubricar, ¡gracias por la propina! – user625626

+0

desafortunadamente, lubricar también usa strptime en su función parse_date, por lo que no necesita ayuda de ese lado :-( – user625626

Cuestiones relacionadas