我对为什么某些字符(例如“Ě”,“Č”和“ŝ”)会在数据框中失去其变音符号感到困惑,而其他字符(例如“Š”和“š”)则不会。顺便说一下,我的操作系统是Windows 10。在下面的示例代码中,向量czechvec具有11个单字符字符串,都是斯拉夫重音字符。R可以正确显示这些字符。然后创建了一个名为mydf的数据框,其中czechvec作为第二列(使用函数I()使其不会转换为因子)。但是,当R显示mydf或mydf的任何行时,它将大多数这些字符转换为其纯ASCII等效项;例如,mydf [3,]显示字符为“E”,而不是“Ě”。但是,通过行和列进行下标,例如mydf [3,2],它会正确地显示带重音符号的字符(“Ě”)。为什么R显示整行还是只显示一个单元格会有区别呢?为什么像“Š”这样的字符完全不受影响呢?并且,当我将此数据框写入文件时,即使我指定fileEncoding =“UTF-8”,它也会完全丢失重音符号。
> charvals <- c(193, 269, 282, 268, 262, 263, 348, 349, 350, 352, 353)
> hexvals <- as.hexmode(charvals)
> czechvec <- unlist(strsplit(intToUtf8(charvals), ""))
> czechvec
[1] "Á" "č" "Ě" "Č" "Ć" "ć" "Ŝ" "ŝ" "Ş" "Š" "š"
>
> mydf = data.frame(dec=charvals, char=I(czechvec), hex=I(format(hexvals, width=4, upper.case=TRUE)))
> mydf
dec char hex
1 193 Á 00C1
2 269 c 010D
3 282 E 011A
4 268 C 010C
5 262 C 0106
6 263 c 0107
7 348 S 015C
8 349 s 015D
9 350 S 015E
10 352 Š 0160
11 353 š 0161
> mydf[3,2]
[1] "Ě"
> mydf[3,]
dec char hex
3 282 E 011A
>
> write.table(mydf, file="myfile.txt", fileEncoding="UTF-8")
>
> df2 <- read.table("myfile.txt", stringsAsFactors=FALSE, fileEncoding="UTF-8")
> df2[3,2]
[1] "E"
编辑后补充:根据Ernest A的答案,这种行为在Linux中无法重现。这一定是Windows的问题。(我使用的是Windows下的R 3.4.1版本。)