我有一个用 utf-8 编码的 R 脚本。在Rstudio中运行时,土耳其语字符没有问题。但是,当我尝试从 cmd 运行它时,它会抛出错误:
列
和ÜrünAçiklama
不存在。HataTanimi
它给出了这个错误,因为我的数据框有列“
ÜrünAçıklama
”和“HataTanımı
”。
可以看到,字符“Ü,ü,Ç”没有问题,但无点 i (ı) 有问题。我在 cmd 中使用这一行运行脚本
Rscript --encoding="UTF-8" myscript.r
我的操作系统是windows10
我该怎么办?预先感谢。
编辑: 举个例子应该没问题。 这是我的数据集。当我尝试删除重复行时,我无法到达包含 dotless i 的列。您可以使用以下脚本在自己的 cmd 中尝试。
library(readxl)
rm(list = ls())
shell("cls")
df <- read_excel("stackoverflow.xlsx")
df$ÜrünNo
df$ÜrünAçıklama
df$HataTanımı
df$HataZamanı
df_nd <- df[!duplicated(df[,c("ÜrünNo","ÜrünAçıklama","HataZamanı")]),]
这也是我的 CMD 输出:
[1] 1 2 3 3 4
[1] "X" "Y" "Z" "Z" "Q"
[1] "A" "B" "C" "C" "D"
[1] 10 11 12 12 13
Error in `vectbl_as_col_location()`:
! Can't subset columns past the end.
x Columns `ÜrünAçiklama` and `HataZamani` don't exist.
Backtrace:
x
1. +-df[!duplicated(df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")])]
2. +-tibble:::`[.tbl_df`(...)
3. +-base::duplicated(df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")])
4. +-df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")]
5. \-tibble:::`[.tbl_df`(df, , c("ÜrünNo", "ÜrünAçiklama", "HataZamani"))
6. \-tibble:::vectbl_as_col_location(...)
7. +-tibble:::subclass_col_index_errors(...)
8. | \-base::withCallingHandlers(...)
9. \-vctrs::vec_as_location(j, n, names)
10. \-vctrs `<fn>`()
11. \-vctrs:::stop_subscript_oob(...)
12. \-vctrs:::stop_subscript(...)
13. \-rlang::abort(...)
Execution halted
如您所见,我可以一一到达列,但是当我尝试删除重复行时,它只是说列不存在。
我在做研究的时候,遇到了这句话。
R 4.2 for Windows will support UTF-8 as native encoding, which will be a major improvement in encoding support, allowing Windows R users to work with international text and data.
后来我才意识到我用的是4.1。更新 R 是最简单、最快的解决方案。抱歉给您带来不便。
问题是 utf-8 既不独立于语言环境,也不独立于表示。例如您可以在脚本中使用 dotless i char,但数据集可能已保存 i+a dotless 修饰符。这些在直接比较中会显示出不同。
在比较 utf-8 字符串之前,您应该使用特殊的库。或提前标准化。