2013-07-18 3 views
19

アジア文字は、matrix、またはvectorに含まれていて、data.frameには含まれていない場合、印刷可能です。ここでは例一部のUnicode文字は行列内に表示されますが、Rのデータフレームは表示されないのはなぜですか?

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(q) 
# "<U+5929>" 

format.defaultに掘り、私はそれは私がそれ以上掘る前にC.

で書かれた、内部formatを呼び出していることがわかります:それはあなたが直接format.defaultを実行する場合、同じ問題が発生することが判明します私は他人がこの行動を再現できるかどうかを知りたい。 これらの文字をdata.frame秒以内に表示するためのRの設定がありますか?

マイ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 
+1

'Sys.setlocale(locale =" UTF-8 ")'を設定してみてください。レンダリングに一貫性がないというのは少し奇妙です。しかし、「English_Canada.1252」はアジアの文字を扱うことを意図していません。 –

答えて

14

私は自分の質問に答えることを憎むが、コメントや回答が助けたものの、彼らはかなり右ではなかったです。 Windowsでは、一般的な 'UTF-8'ロケールを設定することはできません。それはまさにformatlocaleを使用しているようだ、なぜ私が疑問に思う作るん、

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

しかし、:あなたは、しかし、このケースで動作する国固有のロケールを設定することができます私はそれがWindowsでロケールを無視する方法があるのだろうかと思います。また、私がWindows上で知らない一般的な UTF-8ロケールがあるかどうか疑問です。

+0

私は誰かがここで何が起こっているの詳細な詳細な説明とチャイムしたい場合は、自分の答えをチェックする前に、これを少し開いておきます。 – nograpes

+0

私はちょうどこれの上に落ち、Duncan Murdochによれば、バグです(修正するのは難しいものですが)。 https://stat.ethz.ch/pipermail/r-devel/2015-May/071252.html –

+0

@RichieCotton Ah!私はそれがバグだと分かっていた。知らせてくれてありがとうございます。 – nograpes

5

私だけblogged about Unicode and R数日前。あなたのRエディタはUTF-8だと思います。これは、あなたのWindowsのRがUTF-8文字を扱うという幻想を与えます。

簡単な答えは、Unicode(ここでは中国語)を処理したい場合、英語のWindowsを使用しない場合、中国語バージョンのWindowsまたはLinuxを使用します。デフォルトはUTF-8です。私の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  
+0

@nograpes、私のUbuntuとRStudioには、このような表示の問題はありません。興味深いもの: –

+0

'sessionInfo()'を投稿して私の設定を比較して対比することができますか? – nograpes

+0

私は間違いました、私はUbuntuの下で問題を再現できません。ただし、これは役立ちますが、問題を解決できるWindows環境下にRの構成があるかどうかは説明していません。 – nograpes

関連する問題