我對某些字符(例如「Ě」,「Č」和「ŝ」)在數據幀中失去其變音符號感到困惑,而其他字符(例如「Š」和「 「š」)不。順便說一句,我的操作系統是Windows 10。在下面的示例代碼中,矢量czechvec有11個單字符字符串,都是斯拉夫重音字符。 R正確顯示這些字符。然後用czechvec作爲第二列創建一個數據幀mydf(函數I()被使用,所以它不會被轉換爲一個因子)。但是當R顯示mydf或mydf的任何一行時,它會將這些字符中的大部分轉換爲它們的plain-ascii等效值;例如mydf [3,]將字符顯示爲「E」而不是「Ě」。但是使用行和列下標,例如mydf [3,2],它能正確顯示重音字符(「Ě」)。爲什麼R顯示整行或只顯示一個單元格會有所影響?爲什麼像「Š」這樣的字符完全不受影響?同樣,當我將這個數據框寫入文件時,即使指定了fileEncoding =「UTF-8」,它也完全失去了重音。R:數據幀中帶重音符號
> 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"
編輯補充:Per Ernest A的回答,這種行爲在Linux中是不可重現的。它必須是Windows問題。 (我使用R 3.4.1 for Windows。)