scholar_vit (scholar_vit) wrote,
scholar_vit
scholar_vit

Categories:

О стремлении чинить, что не сломалось

Мне нужно было переделать пару картинок к постеру. Соавтор уезжает на конференцию, постер нужен срочно, плюс у меня ещё куча дел. Ну, захожу в директорию, меняю параметры, говорю 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

И на что я, спрашивается, потратил день?!

Програм-м-м-мисты...

Tags: lytdybr, r, tex
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 12 comments