Написание больших документов с Sweave.Можно ли сделать как с LaTeX? - PullRequest
24 голосов
/ 03 декабря 2011

Я просто открываю Sweave и R.Я видел несколько примеров Sweave документов, а также начал писать один или два самостоятельно.Я впечатлен способностью выполнять вычисления в R и выводить результаты непосредственно в LaTeX документе.

Теперь я думаю о больших документах (как мы обычно имеем с LaTeX), которые состоят из нескольких страниц и нескольких частей.С LaTeX (я использую WinEdt) я устанавливаю основной документ (например, main.tex) и затем получаю другие вспомогательные документы, такие как introduction.tex, discussion.tex и т. Д.

Мой вопрос: можем ли мы сделатьэто с Sweave также?Сейчас я работаю только с одним Sweave документом (.Rnw).Можем ли мы иметь несколько Sweave документов (с одним основным и дополнительным), как мы обычно делаем с LaTeX?

Обходной путь может состоять в том, чтобы иметь отдельные файлы Sweave и затем извлекать их, чтобы получить куски R LaTeX, которые можно скопировать в документ LaTeX, но тогда вся идея кажется совершенно неэффективной икропотливый.

Пожалуйста, дайте знать, какие у вас есть предложения и решения.

Большое спасибо ...

Ответы [ 3 ]

19 голосов
/ 03 декабря 2011

Вот что у меня очень хорошо работает:

У меня есть один главный файл ("master.Rnw"), у которого нет текста, но он служит только для сбора файлов (глав, разделов), которые в итоге образуют документ.

Тогда у меня есть один файл с кодом R, который повторно используется в различных других файлах ("func.Rnw"). Здесь у меня много именованных кусков

<<my_fun_1,eval=FALSE,echo=FALSE>>=
# code:
c <- a * b
@

В master.Rnw первое, что я делаю после \ begin {document}, это

\SweaveInput{func.Rnw}

и оттуда у меня есть мои именованные куски. В файле "chap1.Rnw" теперь я могу иметь

<<echo=FALSE>>=
a <- 10
b <- 25
<<my_fun_1>>
c
@

Конечно, мне нужно

\SweaveInput{chap1.Rnw})

в master.Rnw.

Мне нужно только \Sweave{master.Rnw} и затем pdflatex получившегося файла master.tex, без копирования / вставки или обработки нескольких файлов.

Я просто пишу более 60 страниц с примерно 25 таблицами и рисунками, и до сих пор все работает отлично.

Надеюсь, это поможет, Rainer

4 голосов
/ 04 декабря 2011

Я использую Sweave, чтобы написать книгу из 16 глав. Я согласен, что использование make-файла с несколькими файлами Rnw - хорошая идея. Еще одна приятная особенность этого подхода заключается в том, что make можно запускать параллельно (я думаю, что -p), поэтому в зависимости от того, как объекты главы зависят друг от друга, вы можете запускать много кода одновременно.

То, что изменило меня, - это кэширование. Некоторые из моих фрагментов кода могут работать в течение нескольких дней, но не изменились за время написания книги. Существует несколько пакетов, которые позволяют сохранять результаты при запуске и перезапускать чанк только в том случае, если изменились объекты, от которых зависит чанк.

Для этого есть несколько пакетов. См:

http://cran.r -project.org / веб / просмотров / ReproducibleResearch.html

Я использую ткацкую упаковку из биокондуктора.

Пока я в мозгу… если у вас несколько авторов, я обнаружил, что общая учетная запись Dropbox - отличный способ поддержать проект.

Макс

1 голос
/ 02 июля 2013

Я рекомендую использовать RStudio (http://www.rstudio.com/ide/) вместо WinEdt. Sweave хорошо интегрирован в эту IDE и, как в WinEdt, вы можете установить один файл в качестве мастер-файла. Из мастер-файла вы можете включить дочерние файлы, используя

\SweaveInput{Child.Rnw}

Вы можете связать дочерний файл обратно с основным файлом, включив директиву

% !Rnw root = Master.Rnw

в дочернем файле. Таким образом, работая с дочерним файлом и набирая его, RStudio знает, как набирать главный файл.

Подробности объясняются в документации RStudio на http://www.rstudio.com/ide/docs/authoring/multiple_rnw_files

Самая приятная особенность - навигация по журналам ошибок Synctex и TeX по-прежнему работает даже при работе с многофайловыми документами.

...