Как использовать 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, вы сделали мой день, спасибо большое.