rpy2 must be able to locate Amelia to run.2 What directory is rpy2 set to enable? What R Library contains Amelia? A few things determine these settings:
-
R uses
install.packages()
to manage the Library, but users may preferpacman
, which also manages dependencies.3 -
Python packages and project environments are often managed by
pip
,conda
, virtualenv, or containers like Docker.4,5 -
Operating Systems orgainze software like R, RStudio, and python differently. Linux distributions use different software managers such as
apt
, and Windows users may implement scoop or SDKMAN.
- Packages installed from within R take precedence over apt.6
- Python packages installed via apt take precedence over pip, because pip will know packages available at pipy are installed in /usr/lib/python?/dist-package. apt installs python packages in dist-package seperate from site-package.7 When pip is itself an apt installed dist-package it also installs packages from pipy as dist-packages, however, at local/lib.
- pip running from an virtual environment "venv" initiated by
virtualenv
locates packages in ./venv/lib/python?/site-package. When rpy2 is installed here, it initializes R engines in the R default environment/Library.
1. R and RStudio: What R Library contains Amelia?
# bash
# install R and RStudio https://cran.r-project.org/bin/linux/debian/
$ sudo apt install r-base r-base-dev
$ apt list r-base # R version
# check R environment variable to Library
$ cat /etc/R/Renviron | grep LIB
$ cat /usr/lib/R/etc/Renviron | grep LIB
# install Amelia
$ sudo apt install r-cran-amelia
$ apt show r-cran-amelia # Version: 1.7.6-1+b1
$ cd /usr/lib/R/site-library/ # https://cran.r-project.org/bin/linux/debian/#pathways-to-r-packages
# R
$ R
# install
> install.packages('Amelia')
> install.packages('pacman')
> pacman::p_install("Amelia")
# check Library directories
> libPaths() # https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/libPaths
> pacman::p_path() # https://www.rdocumentation.org/packages/pacman/versions/0.5.1/topics/p_path
> pacman::p_path(package = "Amelia")
# python
$ python3
>>> import rpy2.robjects.packages as rpacks # requires rpy2 is installed as described below
>>> rutils = rpacks.importr('utils')
>>> utils.chooseCRANmirror(ind=1)
>>> from rpy2.robjects.vectors import rStrVector
>>> rutils.install_packages(rStrVector('Amelia'))
2. python: What directory is rpy2 set to enable?
# bash
# rpy2 via apt https://packages.debian.org/bullseye/python3-rpy2
$ sudo apt install python3-rpy2
$ apt list --installed python3-rpy2 # version
$ dpkg -L python3-rpy2 # directories /usr/lib/python3/dist-packages/
# rpy2 via pip
$ pip install rpy2 # Requirement already satisfied
$ pip show rpy2 # version 3.4.2, Location: /usr/lib/python3/dist-packages
# Amelia https://packages.debian.org/bullseye/r-cran-amelia
$ sudo apt install r-cran-amelia
$ apt list --installed r-cran-amelia
$ dpkg -L r-cran-amelia
## python default environment
$ python3
# test rpy2 https://rpy2.github.io/doc/latest/html/introduction.html
>>> import rpy2
>>> from rpy2.robjects.packages import importr
>>> print(rpy2.robjects.r) # R version
>>> print(rpy2.__version__) # rpy2 version
>>> print(rpy2.situation) # R environment
>>> for row in rpy2.situation.iter_info(): # inspect R environment
... print(row)
...
>>> # print(rpy2.robjects.r('1+2')) # run R code as string
# check R Library directories in python
>>> base = importr('base')
>>> print(base._libPaths())
>>> print(base._Library)
>>> print(base._Library_site)
## python in virtual environment
$ pip install virtualenv
$ cd # to desired directory of virtual environment
$ virtualenv venv
$ source ./venv/bin/activate
$ pip install rpy2==3.4.2 # Debian bullseye version
$ pip show rpy2 # ./venv/lib/python3.9/site-packages
# test rpy2
$ python3
>>> import rpy2
>>> from rpy2.robjects.packages import importr
>>> print(rpy2.robjects.r) # R version
>>> print(rpy2.__version__) # rpy2 version
>>> print(rpy2.situation) # R environment
>>> for row in rpy2.situation.iter_info(): # inspect R environment
... print(row)
...
# check R Library directories in python
>>> base = importr('base')
>>> print(base._libPaths())
# python
# import
import rpy2
from rpy2.robjects.packages import importr # https://rpy2.github.io/doc/v2.9.x/html/robjects_rpackages.html
from rpy2.robjects import packages as rpacks
from rpy2.robjects import r # to run R as str input
import pandas as pd
from rpy2.robjects import pandas2ri # requires pandas
# import Amelia
Amelia = importr('Amelia')
# Documentation: https://r.iq.harvard.edu/docs/amelia/amelia.pdf
# get R help
Amelia
# r_help = r_utils.help('help') # help within utils
# str(r_help)
# r_help_where = r_utils.help_search('help') # search help within utils
dir(Amelia)
Amelia.
# pass python code to the embedded R engine using `rpy2.rinterface` https://rpy2.github.io/doc/latest/html/rinterface.html#calling-python-functions-from-r