В разделе пакета 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"