Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Linux上的Rpy2&引用;R库不包含任何包“-错误_Python_R_Rpy2_R Package - Fatal编程技术网

Python Linux上的Rpy2&引用;R库不包含任何包“-错误

Python Linux上的Rpy2&引用;R库不包含任何包“-错误,python,r,rpy2,r-package,Python,R,Rpy2,R Package,我尝试安装rpy2,但它无法加载任何软件包 #!/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.ro

我尝试安装rpy2,但它无法加载任何软件包

#!/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() 
我的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安装软件包,所以我打开R并键入
install.packages()
对于一些软件包,如base、UTIL、grDevices…,它们被算作基本软件包,它说出于这个原因它不会更新它。但我发现他们的路径是“/usr/lib/R/library”

然后,对于我想要安装的其他软件包,如ggplot2,它将其安装到“/usr/local/lib/R/site library”中,这是第一个安装步骤中需要的

这两个都不是rpy2想要的。它需要/usr/lib/R/site库

但我甚至发现在导入这样的包时可以添加路径:

base = importr('base', lib_loc="/usr/lib/R/library")
这有点奏效。 我已经从上面(第二个框)逐行测试了我的代码,并为使用importr导入的所有包添加了它。 而且x导入y的大部分
也起了作用。只是不是网格。
从rpy2.robjects.lib导入网格
仍然给了我相同的“library'/usr/lib/R/site library'contains no packages”消息。 但是我不知道如何在那里添加路径

我和我的教授花了两天时间试图找到解决办法。我真的很绝望。 为什么路径甚至是这样一个问题?我没有看到任何人谈论它选择的默认路径是不正确的,我发现的一切都是针对windows的!如果默认值不正确,文档中不应该有吗?如果它只对其他人有效,我做错了什么


是一个类似的问题,但是他的rpy2想要使用usr/local/lib,这在我的例子中是正确的!!(没有真正的答案,至少我什么都不懂)

R可以通过多种方式安装,并且可以在配置(可能是安装)时指定接收包的默认目录。如果您为整个系统安装了R,并且假设这是唯一安装的R,我们将其称为“system R”,并且安装R的目录、默认(“推荐”)软件包以及将安装的其他软件包位于
/usr
下。如果您使用的是预编译和打包的R(例如RPM或deb),则确切位置将取决于该二进制软件包。在该目录中写入通常需要提升权限,这就是为什么需要
sudo

除了该目录之外,还可以指定安装R包的其他目录。当R提示您使用用户本地目录时,就会发生这种情况。(注意:然后将软件包安装在
~/R/x86\u 64-pc-linux-gnu-library/3.6
,而不是
/R/x86\u 64-pc-linux-gnu-library/3.6
)。在R中时,命令
.libPaths()
将告诉您R在哪里查找其包,该函数的R文档将列出R如何获取该信息

最后,您列出了几个目录,其中有软件包,或者没有软件包,或者您的问题中可能安装了软件包:

  • /usr/local/lib/R/site library
  • ~/R/x86\u 64-pc-linux-gnu-library/3.6
  • /usr/lib/R/站点库
  • /usr/lib/R/library

几乎可以肯定的是,对于您安装的软件包的位置以及您认为它们安装在何处,存在着混淆。由于您
sudo
,因此我建议您在某个时候卸载并重新安装R,按照R的建议在个人库中安装软件包,并设置环境变量
R_LIBS_USER
指向该目录(请参阅)。

这可能有助于设置rpy2