【发布时间】:2020-12-17 12:21:16
【问题描述】:
我尝试安装 rpy2 但它无法加载任何包。
我的 Linux 是 Mint 20,
Python 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
仍然给了我相同的“库‘/usr/lib/R/site-library’不包含包”消息。
但我不知道如何在那里添加路径!
我的教授和我试图找到解决方案 2 天。我真的很绝望。 为什么路径甚至是这样一个问题?我看到没有人谈论它选择的默认路径不正确,而我发现的所有内容都只是针对 windows 的!如果默认值不正确,那不应该在文档中吗?如果它只适用于其他人,那我做错了什么?
R library contains no packages 是一个类似的问题,但他的 rpy2 想使用 usr/local/lib,这在我的情况下是正确的! (并没有真正的答案,至少我没有理解)
【问题讨论】:
-
也许这有助于设置 rpy2 stackoverflow.com/questions/61622624/…