scholar_vit: (Default)
[personal profile] scholar_vit

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

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

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

Date: 2011-11-08 11:03 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Однобайтовые кодировки использовать пора бы и перестать.

Date: 2011-11-08 11:04 pm (UTC)
From: [identity profile] scholar-vit.livejournal.com
В данном случае роли не играет: unicode, который приняли за Latin-1, тоже даст замечательные результаты.

Date: 2011-11-08 11:26 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Я не про вашу контору, я про Sweave. Пора уже assume UTF-8, если не встречаются запрещенные байты.

Date: 2011-11-09 04:20 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Ну так в Koi8-r они наверняка встретсятся.

Надо эксперимент провести. Подсунуть без явного указания кодировки файл в UTF-8 (естественно с &#xFEFF в начале) и посмотреть что будет.

Date: 2011-11-09 05:03 am (UTC)
From: [identity profile] spamsink.livejournal.com
Ну вот я и говорю, что когда они встречаются, то кодировку не угадаешь (порядочные программы, правда, в LANG или LC_CTYPE могут посмотреть), а когда не встречаются, то UTF-8 ни с чем не перепутаешь.

Date: 2011-11-09 06:31 am (UTC)
From: [identity profile] potan.livejournal.com
Не понимаю увлечения литературным программированием...

Date: 2011-11-09 04:27 pm (UTC)
From: [identity profile] scholar-vit.livejournal.com
У меня плохая память и куча разнообразных проектов. Отсюда простое требование: когда я вернусь к прерванной работе через несколько месяцев (над проектом, о котором шла речь, я работал в феврале), я сам должен понимать, о чем я тогда думал. Поэтому текст важнее вычислений или там программ.

Date: 2011-11-10 06:15 am (UTC)
From: [identity profile] potan.livejournal.com
Лично мне писать текст сильно сложнее, чем писать код, так что бы я его смог прочитать...

Date: 2011-11-10 05:46 pm (UTC)
From: [identity profile] scholar-vit.livejournal.com
Основная проблема literate programming состоит в том, что средний программист не умеет ни читать, ни писать на естественном языке.

Так как я большую часть своего времени пишу и читаю тексты, мне проще. Впрочем, я не программист.
Edited Date: 2011-11-10 05:49 pm (UTC)

Date: 2011-11-09 07:59 am (UTC)
From: [identity profile] laoxia.livejournal.com
>Пошаговое прохождение показало

А чем его вы его так? debug()/undebug() и browser() или есть какая-то тайная IDE которую я так пока и не нашел?

Date: 2011-11-09 04:30 pm (UTC)
From: [identity profile] scholar-vit.livejournal.com
В данном случае под пошаговым прохождением понималась совсем простая вещь: выполнение команд из Makefile по одной и проверка, что получается.

А тайная IDE для R есть. ESS называется: http://ess.r-project.org/

Date: 2011-11-10 05:41 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Назвали бы USS.

Profile

scholar_vit: (Default)
scholar_vit

January 2019

S M T W T F S
  12345
678 9101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2025 08:55 pm
Powered by Dreamwidth Studios