28

少なくとも一部のケースでは、アジア文字がmatrix、または に含まれていて に含まれてvectorいない場合、それらは印刷可能ですdata.frame。ここに例があります

q<-'天'

q # Works
# [1] "天" 

matrix(q) # Works
#      [,1]
# [1,] "天"

q2<-data.frame(q,stringsAsFactors=FALSE) 
q2 # Does not work
#          q
# 1 <U+5929>

q2[1,] # Works again.
# [1] "天"

明らかに、私のデバイスはキャラクターを表示できますが、 の場合data.frameは機能しません。

掘り下げてみると、print.data.frame関数がformat各列で実行されることがわかりました。format.default直接実行すると、同じ問題が発生することがわかりました。

format(q)
# "<U+5929>"

を掘り下げると、C で記述されformat.defaultた internal を呼び出していることがわかりました。format

さらに掘り下げる前に、他の人がこの動作を再現できるかどうかを知りたい. これらの文字を s 内に表示できるようにする R の構成はありますdata.frameか?

sessionInfo()の 、それが役立つ場合:

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
4

2 に答える 2

22

私は自分の質問に答えるのが嫌いですが、コメントと回答は役に立ちましたが、それらは完全には正しくありませんでした. Windows では、一般的な 'UTF-8' ロケールを設定できないようです。ただし、この場合に機能する国固有のロケールを設定できます。

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

しかし、なぜ正確に;formatを使用しているように見えるのか疑問に思います。localeWindowsでロケールを無視する方法はあるのだろうか。また、Windows で知らない一般的なUTF-8ロケールがあるのではないかと思います。

于 2013-07-18T07:31:05.197 に答える
6

数日前にUnicode と R についてブログを書きました。あなたの R エディターは UTF-8 だと思います。これにより、Windows の R が UTF-8 文字を処理しているという錯覚が生じます。

簡単な答えは、Unicode (ここでは中国語) を処理したい場合で、英語の Windows を使用せず、デフォルトで UTF-8 である中国語版の Windows または Linux を使用します。

私の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       
于 2013-07-18T06:37:24.680 に答える