在软件包的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”
答案 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标记可用,这看起来不错 练习使用撇号作为非定向单引号 标记。