how to use rpy2 within a packrat environment?

211 views Asked by At

I try to use an R package that I have installed using the R package 'packrat' that allow to create a virtual environment similar to virtuanlenv in python. But I do not succeed.

Within a console using R I can run successfully the following code:

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

I would like to do the same using rpy2, but I'm unable to activate the packrat environment. Here follow what I've tested unsuccessfully.

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()

But it fails at 'importr' because it cannot find the package 'mycustompackage'. Either unsuccessfull :

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

Neither:

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

Any suggestion on how to use rpy2 with packrat environments?

2

There are 2 answers

0
lgautier On

I am not familiar with the R package packrat, but I am noticing that the bash + R and Python/rpy2 code have a subtle difference that might matter a lot: in the bash + R case, when R is starting it is already in your packrat project directory whereas in the Python / rpy2 case R is starting from a different directory and is moved to the packrat project directory using setwd().

I am reading that packrat is using a file .Rprofile (https://rstudio.github.io/packrat/limitations.html), evaluated by R at startup time if in the current directory. I suspect that the issue is down to how packrat is used rather than an issue with rpy2.

0
jean pierre huart On

Very good remark (hidden file = forgotten file). I found out how to make it running:

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, you made my day, thanks a lot.