簡體   English   中英

Linux 上的 Rpy2。 “R 庫不包含包”-錯誤

[英]Rpy2 on Linux. “R library contains no packages”-Error

我嘗試安裝 rpy2 但它無法加載任何包。

我的 Linux 是 Mint 20,

蟒蛇 3.8.2,

R 3.6.3,
rpy2 3.3.5(順便安裝了pip)

我記得我跟着有人說如何從 python 中安裝 R 包,這就是我所做的:

import rpy2.robjects.packages as rpackages
utils.chooseCRANmirror(ind=1)

packnames= ("ggplot2", "hexbin")
from rpy2.robjects.vectors import StrVector
# R vector of strings (idk what it does)

names_to_install= [x for x in packnames if not rpackages.isinstalled(x)] 
if len(names_to_install) > 0:
    utils.install_packages(StrVector(names_to_install))
quit()

# It will create a WARNING as such: 
# R[write to console]:  'lib = "/usr/local/lib/R/site-library"' is not writable

# Would you like to use a personal library instead? (yes/No/cancel) yes
# Would you like to create a personal library
# ‘~/R/x86_64-pc-linux-gnu-library/3.6’
# to install packages into? (yes/No/cancel) yes

# SO JUST SAY YES TWICE AND IT WILL CREATE A NEW FOLDER FOR YOUR INSTALLED PACKAGES!!

好吧,所以我的軟件包安裝在 /R/x86_64-pc-linux-gnu-library/3.6

但后來我改變了這一點,當我從互聯網上嘗試一些測試代碼時,我收到一條警告,說我沒有包。

#!/usr/bin/python3.8

import rpy2

print("rpy2 version is:", rpy2.__version__)
# >>rpy2 version is: 3.3.5

import rpy2.robjects as robjects

                    # R PACKAGES
# rpy2 is providing a function rpy2.robjects.packages.importr()
# that makes that step very similar to importing Python packages.

from rpy2.robjects.packages import importr  

base = importr('base')
utils = importr('utils')


from rpy2.robjects import Formula, Environment
from rpy2.robjects.vectors import IntVector, FloatVector
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import data
from rpy2.rinterface_lib.embedded import RRuntimeError
import warnings

# The R 'print' function
rprint = robjects.globalenv.find("print")
stats = importr('stats')
grdevices = importr('grDevices')
datasets = importr('datasets')

grid.activate() 

警告是:

R[write to console]: Warning messages:

R[write to console]: 1: 
R[write to console]: In (function (package, help, pos = 2, lib.loc = NULL, character.only = FALSE,  :
R[write to console]: 
 
R[write to console]:  library ‘/usr/lib/R/site-library’ contains no packages

R[write to console]: 2: 
R[write to console]: In (function (package, help, pos = 2, lib.loc = NULL, character.only = FALSE,  :
R[write to console]: 
 
R[write to console]:  library ‘/usr/lib/R/site-library’ contains no packages

然后我嘗試從 R 安裝軟件包,所以我 sudo 打開 R 並輸入install.packages()為一些軟件包,如 base、utils、grDevices...,它們算作基本軟件包,它說它不會更新它那個原因。 但我發現他們的路徑是“/usr/lib/R/library”

然后對於我想安裝的其他軟件包,例如 ggplot2,它將它安裝到“/usr/local/lib/R/site-library”中,這是在第一個安裝步驟中想要的。

這些都不是 rpy2 想要的。 它想要 /usr/lib/R/site-library

但我什至發現我可以在導入這樣的包時添加路徑:

base = importr('base', lib_loc="/usr/lib/R/library")

它有點工作。 我已經從上面(第二個框)逐行測試了我的代碼,並為所有使用 importr 導入的包添加了它。 大多數from x import y工作。 只是沒有網格。 from rpy2.robjects.lib import grid仍然給了我同樣的“library '/usr/lib/R/site-library' contains no packages”消息。 但我不知道如何在那里添加路徑!!

我的教授和我試圖找到解決方案 2 天。 我真的很絕望。 為什么路徑甚至是這樣的問題? 我看到沒有人談論它選擇的默認路徑不正確,而且我發現的一切都只適用於 Windows! 如果默認值不正確,那不應該在文檔中嗎? 如果它只適用於其他所有人,我做錯了什么?

R library contains no packages是一個類似的問題,但他的 rpy2 想使用 usr/local/lib,這在我的情況下是正確的!! (並沒有真正的答案,至少我沒有理解)

R 可以通過多種方式安裝,並且可以在配置(也可能是安裝)時指定將接收包的默認目錄。 如果您為完整系統安裝了 R,並假設這是唯一安裝的 R,我們將稱其為“系統 R”和安裝 R 的目錄,安裝默認(“推薦”)包,以及其他將安裝的軟件包位於/usr 如果您使用的是預編譯和打包的 R(例如,RPM 或 deb),則確切位置將取決於該二進制包。 在該目錄中寫入通常需要提升權限,這就是您需要sudo

除了該目錄之外,還可以指定應安裝 R 包的其他目錄。 當 R 提示您提供使用用戶本地目錄的提議時,就會發生這種情況。 (注意:您的軟件包然后安裝在~/R/x86_64-pc-linux-gnu-library/3.6 ,而不是/R/x86_64-pc-linux-gnu-library/3.6 )。 在 R 中,命令.libPaths()將告訴您 R 在哪里尋找其包,該函數的 R 文檔將列出 R 如何獲取該信息。

最后,您列出了一些包含軟件包的目錄,或者沒有軟件包,或者您的問題中可能已安裝軟件包的位置:

  • /usr/local/lib/R/site-library
  • ~/R/x86_64-pc-linux-gnu-library/3.6
  • /usr/lib/R/site-library
  • /usr/lib/R/library

幾乎可以肯定,您對安裝的軟件包的位置以及您認為它們的安裝位置存在混淆。 由於您sudo ,在某些時候我建議您卸載並重新安裝 R,按照 R 的建議在個人庫中安裝軟件包,並將環境變量R_LIBS_USER設置為指向該目錄(請參閱在 R 中自動創建個人庫)。

暫無
暫無

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

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