О стремлении чинить, что не сломалось
Nov. 8th, 2011 05:51 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Мне нужно было переделать пару картинок к постеру. Соавтор уезжает на конференцию, постер нужен срочно, плюс у меня ещё куча дел. Ну, захожу в директорию, меняю параметры, говорю make — и все вылетает с кучей ошибок.
Пошаговое прохождение показало, что все начинается с того, что Sweave выдает замечательное предупреждение:
Warning: '01_preparation.rnw' has unknown encoding: assuming Latin-1Но исходный файл вовсе не в кодировке Latin-1: он обрабатывает полученные из России по-русски данные, и в нем есть процедуры типа
RussianToLevel <- function(x) { x <- as.character(x) if (grepl("^нет",x)) return(1) if (grepl("^чуть",x)) return(2) if (grepl("^незнач",x)) return(3) if (grepl("^средн",x)) return(4) if (grepl("^сильн",x)) return(5) if (grepl("^очень",x)) return(6) return(NA) }В файле они превратились в такое:
RussianToLevel <- function(x) { x <- as.character(x) NA NA NA NA NA NA return(NA) }Неудивительно, что на следующем шаге все вылетает.
Ок, вручную понабирал команды R, получил картинки, послал.
Затем стал думать, что же случилось. С момента, когда я делал эти картинки в прошлый раз, успел обновить R.
Почитал логи программистов. Замечательная запись:
[CHANGES IN R VERSION 2.13.2:] Sweave now knows about a few more Windows' encodings (including cp1250 and cp1257) and some inputenx encodings such as koi8-r.
Это случай так называемого вранья. На самом деле все в точности наоборот: раньше Sweave знала про эти кодировки, а именно в версии 2.13.2 перестала их извлекать из файла. Смена inputenc на inputenx не дала результатов.
Ещё немного экспериментов показало, что если указать кодировку явно, Sweave милостиво соглашается работать.
В итоге все вылечилось заменой в Makefile строчек
%.tex: %.rnw R CMD Sweave $< %.R: %.rnw R CMD Stangle $<на строчки
%.tex: %.rnw echo "Sweave ('$<', encoding='koi8-r')" | R --slave %.R: %.rnw echo "Stangle ('$<', encoding='koi8-r')" | R --slave
И на что я, спрашивается, потратил день?!
Програм-м-м-мисты...
no subject
Date: 2011-11-08 11:03 pm (UTC)no subject
Date: 2011-11-08 11:04 pm (UTC)no subject
Date: 2011-11-08 11:26 pm (UTC)no subject
Date: 2011-11-09 04:20 am (UTC)Надо эксперимент провести. Подсунуть без явного указания кодировки файл в UTF-8 (естественно с  в начале) и посмотреть что будет.
no subject
Date: 2011-11-09 05:03 am (UTC)no subject
Date: 2011-11-09 06:31 am (UTC)no subject
Date: 2011-11-09 04:27 pm (UTC)no subject
Date: 2011-11-10 06:15 am (UTC)no subject
Date: 2011-11-10 05:46 pm (UTC)Так как я большую часть своего времени пишу и читаю тексты, мне проще. Впрочем, я не программист.
no subject
Date: 2011-11-09 07:59 am (UTC)А чем его вы его так? debug()/undebug() и browser() или есть какая-то тайная IDE которую я так пока и не нашел?
no subject
Date: 2011-11-09 04:30 pm (UTC)А тайная IDE для R есть. ESS называется: http://ess.r-project.org/
no subject
Date: 2011-11-10 05:41 am (UTC)