11

我正在R通过库在我的 Python 脚本中使用,rpy2我需要一个不在 R 的默认安装中的。我该如何安装它?

install.packages("DirichletReg", repos="http://r-forge.r-project.org")

不会工作。

在 Python 上:

>>> install.packages("DirichletReg", repos="http://r-forge.r-project.org") 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'install' is not defined

从R:

> install.packages("DirichletReg", repos="http://r-forge.r-project.org")
Installing package(s) into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning message:
In getDependencies(pkgs, dependencies, available, lib) :
  package ‘DirichletReg’ is not available (for R version 2.14.1)
4

3 回答 3

42

里卡多的答案不再有效。

要从 Python 安装,我们可以使用以下utils.install_packages函数:

from rpy2.robjects.packages import importr
utils = importr('utils')

(该utils软件包R.utils的 pdf 文档可以在此处找到:https ://CRAN.R-project.org/package=R.utils - 或者,更直接地,这里是我们使用的更详细的install.packages函数文档:https: //www.rdocumentation.org/packages/utils/versions/3.6.2/topics/install.packages。它install_packages在 Python 中被重命名为,因为.它不是合法 Python 名称的一部分,因为它在 R 中。)

接下来,您需要决定从哪个仓库获取包。

utils.install_packages您可以在使用参数调用时声明 repo repos

utils.install_packages('DirichletReg', repos="https://cloud.r-project.org")

utils.install_packages或者您可以在调用之前设置镜像

utils.chooseCRANmirror(ind=1) # select the first mirror in the list

或者

utils.chooseBioCmirror(ind=1) # select the first mirror in the list

否则 Python/R 将尝试启动交互式镜像选择器(这可能适用于您的设置,也可能不适用)。

然后,对于单个包:

utils.install_packages('DirichletReg')

或者对于多个包,传递一个字符向量:

from rpy2.robjects.vectors import StrVector

package_names = ('ggplot2', 'hexbin')
utils.install_packages(StrVector(package_names))

这些示例改编自rpy2 文档install.packages文档 - 在我上次编辑时,文档仍然说要这样做。

于 2014-08-15T06:53:17.790 回答
5

运行时pytest,Aaron 的回答使我的 Python 挂起并且 R 不断给出错误消息,可能是因为这个:

在没有先选择镜像的情况下调用install_packages()将要求用户以交互方式选择镜像。

根据rpy2 文档,我使用了这个有效的方法:

from rpy2 import robjects
import rpy2.robjects.packages as rpackages

utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
utils.install_packages("DirichletReg")
DirichletReg = rpackages.importr("DirichletReg")
于 2020-06-23T17:59:41.447 回答
-3

这个怎么样

>>> import rpy2.interactive as r
>>> r.importr("utils")
>>> package_name = "DirichletReg"
>>> r.packages.utils.install_packages(package_name)
于 2012-07-19T19:35:50.980 回答