Как использовать rpy2 в среде packrat?

Я пытаюсь использовать пакет R, который я установил, используя пакет R packrat, который позволяет создать виртуальную среду, похожую на virtuanlenv в python. Но мне это не удается.

В консоли, использующей R I, можно успешно запустить следующий код:

cd /path/to/packrat/environment
R # this launch a R console in the packrat environment
library(mycustompackage)
result = mycustompackage::myfunc()
q()

Я хотел бы сделать то же самое с помощью rpy2, но я не могу активировать среду packrat. Вот следуйте тому, что я проверил неудачно.

from rpy2.robjects import r
from rpy2.robjects.packages import importr

packrat_dir = r.setwd('/path/to/packrat/environment')
importr('mycustompackage')
result = r.mycustompackage.myfunc()

Но он не работает в 'importr', потому что не может найти пакет 'mycustompackage'. Либо неудачный

importr('mycustompackage', lib_loc='/path/to/packrat/environment')

Ни:

os.environ['R_HOME'] = '/path/to/packrat/environment'
importr('mycustompackage', lib_loc ='/path/to/packrat/environment')  

Любое предложение о том, как использовать rpy2 с пакетными средами?

2 ответа

Я не знаком с пакетом R packrat, но я замечаю, что коды bash + R и Python/rpy2 имеют небольшую разницу, которая может иметь большое значение: в случае bash + R, когда R запускается, он уже находится в каталоге вашего проекта packrat, тогда как в Python/rpy2 case R запускается из другого каталога и перемещается в каталог проекта packrat с помощью setwd(),

Я читаю, что Packrat использует файл .Rprofile ( https://rstudio.github.io/packrat/limitations.html), оценивается R во время запуска, если в текущем каталоге. Я подозреваю, что проблема заключается в том, как packrat используется, а не проблема с rpy2.

Очень хорошее замечание (скрытый файл = забытый файл). Я узнал, как заставить его работать:

from rpy2.robjects import r
from rpy2.robjects.packages import importr

# Init the packrat environment
r.setwd('/path/to/packrat/environment')
r.source('.Rprofile')

# use the packages it contains
importr('mycustompackage')    
result = r.myfunc()

lgautier, вы сделали мой день, спасибо большое.

Другие вопросы по тегам