[英]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.