R:如何确保R CMD BATCH不会产生非ASCII字符?

时间:2019-01-17 18:19:54

标签: r encoding r-package rscript

在软件包的tests部分中,我通常在某些R CMD BATCH文件上运行xxx.R,这将创建一个xxx.Rout.save。问题是失败的all.equal()将创建非ASCII字符。稍后在运行R CMD check时会产生错误:

  

将“ xxx.sim.Rout”与“ xxx.sim.Rout.save”进行比较

     

-“组件\” short.run \“:平均相对差:0.2180449”

     

-“组件'short.run':平均相对差:0.2180449”

这是因为all.equal()创建了非ASCII字符:

> tools::showNonASCII(all.equal(list(a=1), list(a=2)))
Component <e2><80><9c>a<e2><80><9d>: Mean relative difference: 1

似乎R CMD check运行的xxx.R脚本的选项与运行R CMD BATCH时使用的选项不同...请注意,R扩展指南说:

  

请注意,比较将在最终用户的语言环境中进行,   因此目标输出文件应尽可能为ASCII。

但是不清楚如何确定R CMD BATCH以ASCII创建输出吗?我尝试过R CMD BATCH --encoding=ASCII,但它仍然会创建非ASCII文件!?

cat("all.equal(list(a=1), list(a=2))", file ="xxx.R")
system("R CMD BATCH --encoding=ASCII xxx.R xxx.Rout")
tools::showNonASCIIfile("xxx.Rout")
file.remove(c("xxx.R", "xxx.Rout"))

确实给予了

  

“组件<80> <9c> a <80> <9d>:平均相对差:1”

1 个答案:

答案 0 :(得分:0)

避免此问题的一种方法是更改​​res = [x for x in lst if x not in dlt or x in remove1(cpy, x) and x not in remove1(dlt, x)] 中的引号。事实证明,all.equal()使用dQuote()作为引号,取决于是否使用all.equal(),是否使用花式引号。

最简单的方法是将其关闭(Windows btw默认情况下处于关闭状态):

options()$useFancyQuotes

实际上,使用默认TRUE只是在自找麻烦,请参阅文档:

  

适当的引号的选择取决于两个   语言环境和可用的字符集。较旧的Unix / X11字体   显示重音符号(ASCII代码0x60)和撇号(0x27)   以某种方式也可以用作匹配打开和关闭   单引号。这些使用现代字体或非Unix系统,   字符不再产生匹配的字形。 Unicode提供左   右单引号字符(U + 2018和U + 2019);如果   不能假定Unicode标记可用,这看起来不错   练习使用撇号作为非定向单引号   标记。