RPY2: importr在.Renviron中失败

3 投票
1 回答
2026 浏览
提问于 2025-04-16 19:39

使用 rpy2.robjects.packages.importr 来导入基础的 R 包(比如 stats)时,应该和实际发生的情况是这样的:

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

但是当涉及到一个外部包(比如 ggplot2)时,结果就变成这样:

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

这里有个复杂的地方,我的主目录下有一个文件 .Renviron,它定义了我的用户库的位置(比如 ggplot2 的库就放在这里),而且我在使用 RRscript 的时候,使用 library()require() 都没有问题。这个路径大概是这样的:

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

所以我想问的是,为什么我的用户库路径没有包含在 Rpy2 使用的“搜索列表”中?或者说,我该如何让 Rpy2 也去 R_LIBS_USER 的路径中查找呢?

我猜这个问题可能和 Rpy2 使用的环境有关,但我对此了解得不多。

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

重复一下这个问题:

Rpy2: 2.1.8, 2.2.1 (dev)

我经常使用 R、ggplot2 和 Python,所以任何见解都非常欢迎。

1 个回答

2

默认情况下,rpy2 是以“普通”模式启动的,这种模式会忽略 R_LIBS 以及相关的设置。

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

你可以使用 'rinterface.set_initoptions()' 来更改这些设置。

比如:

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.

撰写回答