Linux上的Rpy2 “ R库不包含程序包”-错误

问题描述

我尝试安装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,:
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,对我而言这是正确的! (并没有真正的答案,至少我不了解)

解决方法

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指向该目录(请参见{ {3}})。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...