簡體   English   中英

R、Python:在 rpy2 上安裝軟件包

[英]R, Python: install packages on rpy2

我使用R通過我的Python腳本rpy2庫,我需要一個,是不是在河的默認安裝如何安裝呢?

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)

里卡多的回答不再有效。

要從 Python 安裝,我們可以使用utils.install_packages函數:

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

(該utils包是R.utils包,其 pdf 文檔可以在這里找到: https : R.utils - 或者,更直接地,是更詳細的install.packages函數我們使用的文檔: https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/install.packages 。它在 Python 中重命名為install_packages ,因為.不是合法 Python 名稱的一部分,因為它在 R 中。)

接下來,您需要決定從哪個 repo 獲取包。

您可以在使用repos參數調用utils.install_packages時聲明 repo:

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文檔 - 在我上次編輯時,文檔仍然說要這樣做。

運行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")

這個怎么樣

>>> import rpy2.interactive as r
>>> r.importr("utils")
>>> package_name = "DirichletReg"
>>> r.packages.utils.install_packages(package_name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM