【问题标题】:Rpy2 on Linux. "R library contains no packages"-ErrorLinux 上的 Rpy2。 “R 库不包含包”-错误
【发布时间】: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,这在我的情况下是正确的! (并没有真正的答案,至少我没有理解)

【问题讨论】:

标签: python r rpy2 r-package


【解决方案1】:

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 以指向该目录(请参阅 automatically create personal library in R)。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2019-03-26
    • 1970-01-01
    • 2018-08-12
    • 2012-07-18
    • 1970-01-01
    • 2016-09-04
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多