¿Por qué algunos caracteres Unicode se muestran en matrices, pero no marcos de datos en R?

Al menos en algunos casos, los caracteres asiáticos son imprimibles si están contenidos en una matrix o un vector , pero no en un data.frame . Aquí hay un ejemplo

 q<-'天' q # Works # [1] "天" matrix(q) # Works # [,1] # [1,] "天" q2<-data.frame(q,stringsAsFactors=FALSE) q2 # Does not work # q # 1  q2[1,] # Works again. # [1] "天" 

Claramente, mi dispositivo es capaz de mostrar el personaje, pero cuando está en un data.frame , no funciona.

Al hacer algunas excavaciones, encontré que la función print.data.frame ejecuta el format en cada columna. Resulta que si ejecuta format.default directamente, ocurre el mismo problema:

 format(q) # "" 

Buscando en format.default , encuentro que está llamando al format interno, escrito en C.

Antes de profundizar más, quiero saber si otros pueden reproducir este comportamiento. ¿Hay alguna configuración de R que me permita mostrar estos caracteres dentro de data.frame s?

Mi sessionInfo() , si ayuda:

 R version 3.0.1 (2013-05-16) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_Canada.1252 LC_CTYPE=English_Canada.1252 [3] LC_MONETARY=English_Canada.1252 LC_NUMERIC=C [5] LC_TIME=English_Canada.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] tools_3.0.1 

Odio responder mi propia pregunta, pero aunque los comentarios y respuestas me ayudaron, no estaban del todo bien. En Windows, no parece que pueda establecer un entorno genérico ‘UTF-8’. Sin embargo, puede establecer configuraciones regionales específicas de cada país, lo que funcionará en este caso:

 Sys.setlocale("LC_CTYPE", locale="Chinese") q2 # Works fine # q #1 天 

Pero me hace preguntarme por qué exactamente el format parece usar la locale ; Me pregunto si hay una forma de que ignore la configuración regional en Windows. También me pregunto si hay algún lugar genérico UTF-8 que no conozca en Windows.

Acabo de escribir en un blog sobre Unicode y R hace varios días. Creo que su editor R es UTF-8 y esto le da la ilusión de que R en su Windows maneja caracteres UTF-8.

La respuesta corta es cuando desea procesar Unicode (aquí, es chino), no usa English Windows, use una versión china de Windows o Linux que por defecto es UTF-8.

Información de sesión en mi Ubuntu:

 > sessionInfo() R version 2.14.1 (2011-12-22) Platform: i686-pc-linux-gnu (32-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C