首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何确保R CMD批处理不会产生非ASCII字符?

R:如何确保R CMD批处理不会产生非ASCII字符?
EN

Stack Overflow用户
提问于 2019-01-17 18:19:54
回答 1查看 177关注 0票数 0

在包的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字符:

代码语言:javascript
复制
> 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文件!?

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2019-01-18 22:16:20

避免此问题的一种方法是更改all.equal()中的引号。结果是,all.equal()使用dQuote()作为引号,或者使用花哨的引号或不使用引号,这取决于options()$useFancyQuotes

最简单的方法是关闭它(默认情况下在Windows上是关闭的):

代码语言:javascript
复制
options(useFancyQuotes=FALSE)

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

选择适当的引号取决于区域设置和可用字符集。旧的Unix/X11字体显示严重重音(ASCII代码0x60)和撇号(0x27),它们也可以用作匹配的打开和关闭单引号。使用现代字体或非Unix系统,这些字符不再产生匹配的字形.Unicode提供左、右单引号字符(U+2018和U+2019);如果不能假定Unicode标记可用,那么使用撇号作为无方向单引号似乎是一种很好的做法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54242006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档