Можете ли вы запустить Sweave в новой среде?

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

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

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

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

person jbryer    schedule 20.01.2012    source источник


Ответы (2)


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

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

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

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

person Yihui Xie    schedule 21.01.2012
comment
Спасибо, Ихуи. Я намереваюсь добавить поддержку Knitr и cacheSweave для пакета, который я разрабатываю, и могу обратиться к вам за помощью на следующей неделе или около того. - person jbryer; 22.01.2012