Sweave не может загрузить пакеты R

Я обновил R до версии 2.14.0, и вместе с обновлением я решил переместить стандартный репозиторий пакетов в Dropbox, чтобы ноутбук и рабочий стол постоянно синхронизировались. Я установил свой R_LIBS=/Dropbox/ToolBox/R/packages в .Renviron, и при открытии Rstudio или R.app (mac) я получаю следующие команды:

> Sys.getenv("R_LIBS")
[1] "/Dropbox/Toolbox/R/packages"

> .libPaths()
[1] "/Dropbox/Toolbox/R/packages"      
[2] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library"
[3] "/Applications/RStudio.app/Contents/Resources/R/library

но когда я запускаю те же команды в .Snw (Textmate + Sweave), я получаю:

> Sys.getenv("R_LIBS")
[1] ""

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library"

Как вы можете видеть выше, когда я вызываю R из Sweave, он выбирает только стандартный репозиторий. Я создал Renviron.site, Rprofile.site, прочтите help(Startup), отвечая на аналогичные вопросы q1 и q2 безуспешно.

Может ли кто-нибудь пролить свет (шаг за шагом) на то, как решить эту проблему, пожалуйста?

Обновление: когда я просматриваю свой .Snw из R, он собирает все нужные папки. Я не уверен, почему, когда это сделано из textmate, делает что-то другое.

Любые идеи?


person Altons    schedule 16.12.2011    source источник
comment
+1 за документирование уже проведенного вами исследования этого несколько сбивающего с толку аспекта R.   -  person Josh O'Brien    schedule 16.12.2011
comment
Может иметь значение, как вы запускаете Sweave; этот вопрос касается аналогичной проблемы, когда TeXShop делал что-то отличное от простого запуска в командной строке, поэтому правильные переменные среды пришлось изменить другим способом. stackoverflow.com/q/7509395/210673   -  person Aaron left Stack Overflow    schedule 16.12.2011


Ответы (2)


Благодаря Джошу я понял, что проблема не в самом R, а в textmate.

Ни один из пакетов Sweave и R не загружал мой локальный репозиторий из-за опции --vanilla, установленной по умолчанию в обоих пакетах.

Вот мое решение:

Пакет R

  1. Откройте терминал и перейдите в $ HOME / Library / Application Support / TextMate / Pristine Copy / Bundles.
  2. Введите >mate R.tmbundle, это откроет пакет R прямо в textmate
  3. В папке поддержки есть файл tmR.rb
  4. Прокрутите вниз, пока не найдете эту строку: stdin, stdout, stderr, pid = my_popen3("R --vanilla --slave --encoding=UTF-8 2>&1")
  5. Удалите параметр --vanilla и сохраните

Комплект Sweave

  1. В Textmate перейдите в Bundles> Bundles Editor> Show Bundles Editor.
  2. Нажмите на пакет Sweave, чтобы развернуть
  3. Перейдите к Sweave, Typset & View и прокрутите вниз, пока не увидите следующую строку: echo -e "setwd('$SW')\nSweave('$TM_FILEPATH')" | R --vanilla --quiet | pre
  4. Измените --vanilla на --save
  5. Обновить пакет

Счастливые дни снова вернулись :-)

person Altons    schedule 17.12.2011

Попробуйте поместить такую ​​строку в свой "Rprofile.site" файл, расположенный в $R_HOME/etc/. (Здесь $R_HOME - это каталог, возвращаемый запуском R.home() в активном R сеансе.)

(Вы также захотите удалить (возможно, временно) любые ".Rprofile" файлы из: (a) вашего домашнего каталога; и (b) текущего каталога (из которого запускается R / Sweave).)

.libPaths(c("/Dropbox/Toolbox/R/packages", 
            .libPaths()))

Затем, если это не решит проблему полностью (а у меня это точно работает), выполните Sweave, а затем примените LaTeX к скелетному .Snw документу, который включает следующий фрагмент.

<<>>=
R.home()
.libPaths()
@

Результат должен предоставить некоторые полезные подсказки к источнику вашей проблемы.

person Josh O'Brien    schedule 16.12.2011
comment
Я сделал, как вы упомянули, и, к сожалению, не сработал. Это результат приведенного выше фрагмента: R.home () [1] /Library/Frameworks/R.framework/Resources ›.libPaths () [1] /Library/Frameworks/R.framework/Versions/2.14/Resources/ библиотека - person Altons; 16.12.2011
comment
Это кажется странным значением для R.home() (хотя этого можно ожидать на Mac). Учитывая каталог, на который указывает ваше значение по умолчанию .libPaths(), я надеюсь увидеть что-то более похожее на "/Library/Frameworks/R.framework/Versions/2.14/Resources". На моем ПК R.home() возвращает "C:/R/R-2.14.0", который является каталогом, содержащим как R_HOME/library, так и R_HOME/etc (каталог, содержащий "Rprofile.site" - person Josh O'Brien; 16.12.2011
comment
Похоже, это связано с местом, из которого TextMate запускает Sweave. Чтобы подтвердить это, можете ли вы попробовать Sweave("docName.Snw") из сеанса R (вместо того, чтобы запускать Sweave из командной строки или запускать его с помощью TextMate)? - person Josh O'Brien; 16.12.2011
comment
Джош, ты прав. когда я просматриваю файл изнутри R, он все подбирает правильно. Так что мне интересно, что происходит, когда я выхожу изнутри textmate? - person Altons; 17.12.2011
comment
Понятия не имею, так как это, по сути, проблема с одноклассником. Что касается решений, вы можете попробовать поместить etc/Rprofile.site в каталог, который textmate использует как каталог R.home(), когда он запускает Sweave для вас. Чтобы получить помощь от других, вы можете заметно отредактировать свой вопрос, чтобы выразить то, что вы узнали. Кроме того, вы можете проголосовать за этот ответ, поскольку он действительно указывает на источник вашей проблемы, как я и ожидал;) Наконец, обновите, используя любое решение, которое вы в конечном итоге найдете. - person Josh O'Brien; 17.12.2011