RPY2: Importr falla con .Renviron
Pregunta
Esto es lo que debería y sucede usando usando rpy2.robjects.packages.importr
para paquetes R base (por ejemplo stats
):
>>> from rpy2.robjects.packages import importr
>>> importr('stats')
<rpy2.robjects.packages.SignatureTranslatedPackage object at 0x7f3810>
Pero con un paquete externo (por ejemplo ggplot2
) este es el resultado:
>>> importr('ggplot2')
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called 'ggplot2'
Error in .Primitive("as.environment")("package:ggplot2") :
no item called "package:ggplot2" on the search list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/7.0/lib/python2.7/site-packages/rpy2/robjects/packages.py", line 100, in importr
env = _as_env(rinterface.StrSexpVector(['package:'+name, ]))
rpy2.rinterface.RRuntimeError: Error in .Primitive("as.environment")("package:ggplot2") :
no item called "package:ggplot2" on the search list
Una complicación es que en mi directorio de casa tengo el archivo .Renviron
Defina la ubicación de mi biblioteca de usuario (donde, por ejemplo, ggplot2
Las libs son), y no tengo problemas con ninguno de los Commands R library()
o require()
usando R
y Rscript
. El camino se parece a esto:
R_LIBS_USER="/path/to/my/packages"
Entonces, mi pregunta es por qué mi ruta de biblioteca de usuario excluida de la "lista de búsqueda" Rpy2
¿usos? O, más bien, ¿cómo dirijo? Rpy2
mirar en el R_LIBS_USER
¿Camino también?
Supongo que el problema proviene del medio ambiente Rpy2
Usos, pero mi ignorancia es alta en ese sentido.
R: 2.13.0
Platform: x86_64-apple-darwin9.8.0/x86_64 (Mac, 10.6, 64-bit)
replicado con
Rpy2: 2.1.8, 2.2.1 (dev)
Utilizo R, GGPlot2 y Python regularmente, por lo que cualquier información es muy bienvenida.
Solución
Por defecto, RPY2 se está inicializando en modo "Vanilla", y esto ignora R_Libs y amigos.
>>> import rpy2.rinterface
>>> rpy2.rinterface.get_initoptions()
('rpy2', '--quiet', '--vanilla', '--no-save')
>>>
Puede usar 'Rinterface.set_initoptions ()' para cambiarlos.
Por ejemplo:
import rpy2.rinterface as ri
ri.set_initoptions(('rpy2', '--verbose', '--no-save'))
ri.initr()
# from now on, just import the rest of rpy2 modules without thinking of the above.