【问题标题】:Making non-ASCII data suitable for CRAN使非 ASCII 数据适用于 CRAN
【发布时间】:2013-09-21 04:24:28
【问题描述】:

我有一些包含非 ASCII 字符的数据,我想将其作为 rda 文件包含在 R 包中。当我在包上运行 R CMD check 时,我收到警告:

Warning: found non-ASCII strings

这会阻止它在 CRAN 上被允许。

关于removing non-ASCII characters from data files 有一个类似的问题,但我想保留非 ASCII 字符。

您可以获取 CSV 数据here。我正在将其读入 R 并使用以下代码重新保存为 rda

english_monarchs <- read.csv(
  wherever_you_downloaded_the_file_to, 
  fileEncoding     = "utf8",
  na.strings       = ""
)
save(english_monarchs, "english_monarchs.csv")

这是包含非 ascii 值的数据集的 name 列。

head(levels(english_monarchs$name))
## [1] "Adda"                                "Æðelbehrt"                          
## [3] "Æðelberht I"                         "Æðelberht II and Eardwulf"          
## [5] "Æðelberht II, Ælfric and Eadberht I" "Æðelberht III"

根据编写 R 扩展的 Encoding Issues 部分中的(不是很清楚)指导,我认为我应该将因子级别编码为 UTF-8,但显而易见的方法不起作用:

Encoding(levels(english_monarchs$name)) <- "utf8"  #each encoding still "unknown"

如何使数据具有足够的可移植性以在 CRAN 上被接受?

【问题讨论】:

  • 不确定有什么区别,但不应该是"UTF-8"吗?
  • @JoshuaUlrich R 理解带或不带破折号的编码。 iconvlist() 包含两个字符串。
  • 奇怪,因为我在 64 位 Ubuntu 和 Windows 7 上使用 "UTF-8" 时更改了一些编码。
  • 来自?Encoding:R中的字符串可以声明为“latin1”或“UTF-8”或“bytes”。您不能使用任意编码标记字符串,例如 iconv
  • 好的,UTF-8 也能正确更改我机器上的编码。如果你想把它写成答案,我会接受的。谢谢。

标签: r portability cran


【解决方案1】:

对我有用的事情是将编码声明为"latin1",然后使用iconv 转换为UTF-8。

Encoding(levels(english_monarchs$name)) <- "latin1"
levels(english_monarchs$name) <- iconv(
  levels(english_monarchs$name), 
  "latin1", 
  "UTF-8"
)

【讨论】:

  • 今晚我似乎要回答你的每一个 CRAN 问题!有同样的问题!
  • ...或 "latin2" ;)
猜你喜欢
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多