繁体   English   中英

为什么一些Unicode字符显示在矩阵中,而不是R中的数据帧?

[英]Why do some Unicode characters display in matrices, but not data frames in R?

至少在某些情况下,如果亚洲字符包含在matrixvector ,则它们是可打印的,但不包含在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>"

深入研究format.default ,我发现它调用的内部format是用C语言编写的。

在我进一步挖掘之前,我想知道其他人是否可以重现这种行为。 是否有一些R配置允许我在data.frame s中显示这些字符?

我的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

我讨厌回答我自己的问题,但是虽然评论和答案有所帮助,但它们并不完全正确。 在Windows中,您似乎不能设置通用的“UTF-8”语言环境。 但是,您可以设置特定于国家/地区的区域设置,在这种情况下可以使用:

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

但是,它确实让我想知道为什么format似乎使用locale ; 我想知道是否有办法让它忽略Windows中的语言环境。 我也想知道在Windows上是否存在一些我不了解的通用UTF-8语言环境。

几天前我刚刚写了关于Unicode和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       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM