至少在某些情况下,如果亚洲字符包含在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>"
深入研究format.default
,我发现它正在调用以C语言编写的内部format
。
在我进一步挖掘之前,我想知道其他人是否可以重现这种行为。 是否有一些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
答案 0 :(得分:15)
我讨厌回答我自己的问题,但是虽然评论和答案有所帮助,但它们并不完全正确。在Windows中,您似乎不能设置通用的“UTF-8”语言环境。但是,您可以设置特定于国家/地区的区域设置,在这种情况下可以使用:
Sys.setlocale("LC_CTYPE", locale="Chinese")
q2 # Works fine
# q
#1 天
但是,它确实让我想知道为什么format
似乎正好使用locale
;我想知道是否有办法让它忽略Windows中的语言环境。我也想知道在Windows上是否存在一些我不了解的通用UTF-8
语言环境。
答案 1 :(得分: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