Question

Voici ce qui devrait et se passe en utilisant rpy2.robjects.packages.importr pour les packages R de base (par exemple stats):

>>> from rpy2.robjects.packages import importr
>>> importr('stats')
<rpy2.robjects.packages.SignatureTranslatedPackage object at 0x7f3810>

mais avec un package externe (par exemple ggplot2) voici le résultat:

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

Une complication est que dans mon répertoire personnel, j'ai le fichier .Renviron qui définit l'emplacement de ma bibliothèque utilisateur (où, par exemple, les librairies ggplot2), et je n'ai aucun problème avec l'une des commandes R library() ou require() en utilisant R et Rscript. Le chemin ressemble à quelque chose comme ceci:

R_LIBS_USER="/path/to/my/packages"

Ma question est donc de savoir pourquoi mon chemin utilisateur-bibliothèque est exclu de la "liste de recherche" utilisée par Rpy2? Ou, plutôt, comment demander à Rpy2 de rechercher également dans le chemin R_LIBS_USER?

Je suppose que le problème provient de l'environnement utilisé par Rpy2, mais mon ignorance est élevée à cet égard.

R: 2.13.0
Platform: x86_64-apple-darwin9.8.0/x86_64 (Mac, 10.6, 64-bit)

répliqué avec

Rpy2: 2.1.8, 2.2.1 (dev)

J'utilise régulièrement R, ggplot2 et python, donc toute information est la bienvenue.

Était-ce utile?

La solution

Par défaut, rpy2 s'initialise en mode "vanilla", et cela ignore R_LIBS et ses amis.

>>> import rpy2.rinterface 
>>> rpy2.rinterface.get_initoptions()
('rpy2', '--quiet', '--vanilla', '--no-save')
>>> 

Vous pouvez utiliser 'rinterface.set_initoptions ()' pour les modifier.

Par exemple:

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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top