Можете ли вы запустить Sweave в новой среде? - PullRequest
4 голосов
/ 21 января 2012

Я пишу пакет, который работает с Sweave и хотел бы иметь возможность изолировать вызов Sweave от глобальной среды.Вот как я думаю, что это должно работать, но это не так:

sweaveEnv <- new.env()
eval(Sweave('myDocument.Rnw'), envir=sweaveEnv)

В идеале я бы хотел сохранить эту среду для дальнейшей отладки.

save(sweaveEnv, file='mySweaveEnv.Rda')

Ответы [ 2 ]

3 голосов
/ 21 января 2012

Если ваша основная цель - сохранить объекты в этой среде, вы можете использовать пакет knitr с параметром чанка cache=TRUE, и в этом случае все объекты в чанке сохраняются в файлах, и вы можете загрузить позже в R для отладки; knitr создаст файл .rdx и .rdb соответственно для чанка в каталоге кеша, и вы можете вызвать lazyLoad(), чтобы загрузить объекты в этих базах данных в R.

Если вы хотите сделать больше со средой, в которой оценивается чанк, knitr также имеет хуков чанков , и у вас есть доступ к окружениям через хуков; так что в основном вы можете делать все, что захотите - knitr делает практически все доступным для пользователя. Обратите внимание, что каждый чанк оценивается в другой пустой среде, когда кеш включен. У меня пока нет примеров по этой теме, поэтому, пожалуйста, дайте мне знать, если мое описание здесь достаточно ясно.

3 голосов
/ 21 января 2012

Вы можете просто начать новый процесс R:

system("Rscript -e 'Sweave(\"test.Rnw\");save.image(file=\"mySweaveEnv.Rda\")'")
...