在包的tests部分,我通常对一些xxx.R文件运行R CMD BATCH,这会创建一个xxx.Rout.save。问题是失败的all.equal()将创建非ASCII字符.这将在稍后运行R CMD check时产生错误:
“xxx.sim.Rout”与“xxx.sim.Rout.save”的比较 -“组件\”short.run\:平均相对差: 0.2180449“ -“组件‘短期运行’:平均相对差: 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
发布于 2019-01-18 22:16:20
避免此问题的一种方法是更改all.equal()中的引号。结果是,all.equal()使用dQuote()作为引号,或者使用花哨的引号或不使用引号,这取决于options()$useFancyQuotes。
最简单的方法是关闭它(默认情况下在Windows上是关闭的):
options(useFancyQuotes=FALSE)实际上,使用默认的TRUE只是自找麻烦,请参阅文档:
选择适当的引号取决于区域设置和可用字符集。旧的Unix/X11字体显示严重重音(ASCII代码0x60)和撇号(0x27),它们也可以用作匹配的打开和关闭单引号。使用现代字体或非Unix系统,这些字符不再产生匹配的字形.Unicode提供左、右单引号字符(U+2018和U+2019);如果不能假定Unicode标记可用,那么使用撇号作为无方向单引号似乎是一种很好的做法。
https://stackoverflow.com/questions/54242006
复制相似问题