我该如何处理“package 'xxx'”不提供(R版本x.y.z)"警告?

我试着安装一个包,使用

install.packages("foobarbaz")

却收到了警告

Warning message:
package 'foobarbaz' is not available (for R version x.y.z)

为什么R认为这个包是不可用的?

参见这些问题的具体例子:

< p > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < br > # EYZ0 < / p >
907381 次浏览

1. 你不会拼写

首先要测试的是 你把包裹的名字拼对了吗?包名称在 R 中是区分大小写的。


2. 您没有查找正确的存储库

接下来,您应该检查包是否可用

setRepositories()

参见 SetRepositories

要查看哪些存储库 R 将查找您的包,并可选地选择一些附加存储库。至少,您通常希望选择 CRAN,如果使用 Windows,则选择 CRAN (extras),如果进行任何生物学分析,则选择 Bioc*存储库。

若要永久更改此属性,请在 Rprofile.site文件中添加类似于 setRepositories(ind = c(1:6, 8))的行。


3. 软件包不在您选择的存储库中

返回所有可用的包

ap <- available.packages()

参见 R & # 39; s 可用包的名称有空,包裹

由于这是一个很大的矩阵,您可能希望使用数据查看器来检查它。或者,您可以通过对行名称进行测试来快速检查包是否可用。

View(ap)
"foobarbaz" %in% rownames(ap)

或者,在浏览器中可以看到 CRAN(临时演员)生物导体R-ForgeRForgeGitHub的可用软件包列表。

与 CRAN 镜像交互时,你可能会得到另一个警告信息:

Warning: unable to access index for repository

这可能表明所选的 CRAN 存储库当前不可用。您可以使用 chooseCRANmirror()选择一个不同的镜像,然后再次尝试安装。


有几个原因可能会导致软件包不可用。


4. 你不想要包裹

也许你不是真的想要一个包裹。对于 一个包裹和一个图书馆或包与数据集之间的区别,人们常常感到困惑。

包是扩展 R 的标准化材料集合,例如提供代码、数据或文档。库是一个地方(目录) ,R 知道在这里可以找到它可以使用的包

若要查看可用数据集,请键入

data()

5. R 或生物导体已过时

它可能依赖于 R 的最新版本(或者它导入/依赖的某个包)。你看

ap["foobarbaz", "Depends"]

并考虑将您的 R 安装更新到当前版本。在 Windows 上,通过 installr包最容易做到这一点。

library(installr)
updateR()

(当然,您可能首先需要 install.packages("installr")。)

相当于生物导体包,您可能需要更新您的生物导体安装。

source("http://bioconductor.org/biocLite.R")
biocLite("BiocUpgrade")

6. 包裹过期了

它可能是 存档(如果它不再维护,不再通过 R CMD check测试)。

在这种情况下,可以使用 install_version()加载包的旧版本

library(remotes)
install_version("foobarbaz", "0.1.2")

另一种方法是从 GitHub CRAN 镜像安装。

library(remotes)
install_github("cran/foobarbaz")

7. 没有 Windows/OS X/Linux 二进制文件

它可能没有一个 Windows 二进制,因为需要额外的软件,CRAN 没有。此外,有些包只能通过某些或所有平台的源来获得。在这种情况下,CRAN (extras)存储库中可能有一个版本(参见上面的 setRepositories)。

如果软件包需要编译代码(例如 C,C + + ,FORTRAN) ,那么在 Windows 上安装 工具或 OS X 上安装 开发工具附带的 XCode,并通过以下方式安装软件包的源代码版本:

install.packages("foobarbaz", type = "source")


# Or equivalently, for Bioconductor packages:
source("http://bioconductor.org/biocLite.R")
biocLite("foobarbaz", type = "source")

在 CRAN 上,您可以通过查看描述中的 NeedsCompilation标志来判断是否需要特殊的工具来从源代码构建包。


8. 软件包在 GitHub/Bitbucket/Gitorious 上

它可能在 GitHub/Bitbucket/Gitorious 上有一个存储库,这些包需要安装 remotes包。

library(remotes)
install_github("packageauthor/foobarbaz")
install_bitbucket("packageauthor/foobarbaz")
install_gitorious("packageauthor/foobarbaz")

(与 installr一样,您可能首先需要 install.packages("remotes")。)


9. 软件包没有源代码版本

尽管包的二进制版本可用,但源版本不可用。您可以通过设置

options(install.packages.check.source = "no")

这个答案由 imanuelc 提供?install.packages的细节部分所述。


10. 包在一个非标准存储库中

您的软件包在一个非标准的存储库中(例如 Rbbg)。假设它符合 CRAN 标准,您仍然可以使用 install.packages下载它; 您只需要指定存储库 URL。

install.packages("Rbbg", repos = "http://r.findata.org")

另一方面,RHIPE 不在类 CRAN 的存储库中,它有自己的 安装说明书

11. R (或其他依赖项)已过期,您不想更新它。

警告 这并不是最佳实践。

  • 下载软件包源代码。
  • 导航到 DESCRIPTION文件。
  • 用你的文本编辑器去掉那一行。

    Depends: R (>= 3.1.1)
    
  • Install from local (i.e. from the parent directory of DESCRIPTION) e.g.

    install.packages("foo", type="source", repos=NULL)
    

发生在我身上的一件事是,我的 linux 发行版(Ubuntu 14.04提供的 R 3.0.2版本)提供的 R 版本对于 CRAN 上可用的最新版本来说太老了(在我的例子中,是 plyr1.8.3版本)。解决方案是使用我的发行版的打包系统,而不是尝试从 R 安装(apt-get install r-cran-plyr得到了 plyr的1.8.1版本)。也许我可以尝试使用 updateR()更新 R,但是我担心这样做会干扰我的发行版的包管理器。


编辑(04/08/2020) : 我最近遇到了一个包(XML)的问题,据说在我的 R 版本(3.6.3,最新支持的 Debian 版本)中无法使用,在 CRAN 中更新了这个包之后。这是非常出乎意料的,因为我之前已经成功地安装了它(在相同的 R 版本和相同的操作系统上)。

由于某种原因,该软件包仍然存在,但是 install.packages只关注更新的(和不兼容的)版本。解决办法是找到兼容版本的 URL 并强制 install.packages使用它,如下所示:

install.packages("https://cran.r-project.org/src/contrib/Archive/XML/XML_3.99-0.3.tar.gz", repos=NULL, type="source", ask=FALSE)

当我使用生物导体作为源,然后调用 biocLite 时,它几乎总是对我有效。例如:

source("https://bioconductor.org/biocLite.R")
biocLite("preprocessCore")

这节省了我很多时间调试什么是错误的。在许多情况下只是镜子过时了。这个函数可以使用 https://cran.rstudio.com/安装具有依赖关系的多个包:

packages <- function(pkg){
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE, repos='https://cran.rstudio.com/')
sapply(pkg, require, character.only = TRUE)
}


packages(c("foo", "bar", "baz"))

在 R3.2.3(2016年的新版本)中有一个 bug,有时阻止它找到正确的软件包。解决办法是手动设置存储库:

install.packages("lubridate", dependencies=TRUE, repos='http://cran.rstudio.com/')

另一个问题中找到了解决方案

某些版本的 Rlibcurl似乎有问题。我在 Mac (R version 3.2.2)Ubuntu (R version 3.0.2)上遇到过同样的问题,在这两个实例中,只要在 install.packages命令之前运行这个命令就可以解决这个问题

options(download.file.method = "wget")

这个解决方案是我的一个朋友提出来的,但是我在任何一个论坛里都没有找到,所以我把这个答案提交给了其他人。

我在 Ubuntu 上通过仔细跟踪 安装 R 的说明修正了这个错误,包括:

  1. deb http://cran.utstat.utoronto.ca/bin/linux/ubuntu trusty/添加到我的/etc/apt/sources.list 文件中
  2. 运行 sudo apt-get update
  3. 运行 sudo apt-get install r-base-dev

对于第一步,你可以选择任何 CRAN 下载镜像代替我的多伦多大学之一,如果你愿意。

另一个小的增加,当试图测试一个旧的 R 版本使用泊岸图像 rocker/r-ver:3.1.0

  1. 默认的 repos设置是 MRAN,这样就无法获得许多包。
  2. 那个版本的 R 没有 https,所以,举个例子: install.packages("knitr", repos = "https://cran.rstudio.com")似乎起作用了。

正如前面提到的 给你(法语) ,当您的计算机上安装了两个版本的 R 时,就会发生这种情况。卸载最老的一个,然后再次尝试安装您的软件包!我觉得挺好的。

我(在 Linux 上)遇到了同样的问题,可以通过改变代理设置来解决。 如果您落后于代理服务器,请在 R 中使用 Sys.getenv("http_proxy")检查配置。 在我的 ~/.Renviron我有以下的线(从 https://support.rstudio.com/hc/en-us/articles/200488488-Configuring-R-to-Use-an-HTTP-or-HTTPS-Proxy)造成的问题:

http_proxy=https://proxy.dom.com:port
http_proxy_user=user:passwd

改成

http_proxy="http://user:passwd@proxy.dom.com:port"

解决了这个问题。你可以对 https做同样的事情。

当我读到“包 xxx 不适用于 r version-x-y-z”时,这不是第一个想法..。

高温

当我收到同样的警告时,这就是我最终可以在 R-3.4.1中安装心理软件包的方法

第1集: 谷歌的包裹。

2: 通过 tar.gz 扩展手动下载它

3: 在 R 中为安装包选择“ Package Archive File (. zip; . tar.gz)”选项

4: 在本地浏览到下载地点,然后点击安装

您可能会得到一个警告: 依赖项‘ xyz’对于包不可用,然后首先从存储库安装这些依赖项,然后执行步骤3-4 .

我犯了一个错误,在从源代码安装 R 包时忘记放入 repos=NULL。在这种情况下,错误消息稍有误导: package 'foobarbaz' is not available (for R version x.y.z)

问题不是 R 的版本,而是 repos参数。我做的 install.packages('path/to/source/code/of/foobarbaz', type='source', repos=NULL)在这种情况下为我工作。

希望这对谁有帮助。

这个解决方案可能会破坏 R,但是这里有一个最简单的解决方案,可以在99% 的时间内工作。

你需要做的只是:

install.packages('package-name',repos='http://cran.us.r-project.org')

正如作者在 给你上提到的

另一个原因 + 解决方案

当试图在我公司的 HPC 上的 RStudio 中安装 Pkgdown时,我遇到了这个错误(“套件 XXX 不适用于 R 版本的 X.X.X”)。

原来,他们在 HPC 上的 CRAN 快照是从2018年1月开始的(差不多2年了) ,事实上 Pkgdown当时并不存在。这是为了控制外行用户的软件包源代码,但是作为一个开发人员,在大多数情况下,您可以通过以下方式进行更改:

## checking the specific repos you currently have
getOption("repos")


## updating your CRAN snapshot to a newer date
r <- getOption("repos")
r["newCRAN"] <- "https://cran.microsoft.com/snapshot/*2019-11-07*/"
options(repos = r)


## add newCRAN to repos you can use
setRepositories()

如果您知道自己在做什么,并且可能需要一个以上的软件包,而这些软件包可能在系统的 CRAN 中不可用,那么您可以在项目 .Rprofile中设置这个软件包。

如果只是一个包,也许只是使用 install.packages("package name", repos = "a newer CRAN than your company's archaic CRAN snapshot")

  1. 访问 https://cran.r-project.org/src/contrib/Archive/
  2. 找到要用 Ctrl + F安装的软件包
  3. 单击包名称
  4. 确定要安装的版本
  5. 打开 RStudio
  6. 输入“ install.packages("https://cran.r-project.org/src/contrib/Archive/[NAME OF PACKAGE]/[VERSION NUMBER].tar.gz", repos = NULL, type="source")

在某些情况下,您需要提前安装多个软件包来使用您想要使用的软件包。

例如,我需要安装7个软件包(SejonghashrJavatauRSQLitedevtoolsstringr)来安装 KoNLP软件包。

install.packages('Sejong')
install.packages('hash')
install.packages('rJava')
install.packages('tau')
install.packages('RSQLite')
install.packages('devtools')
install.packages('stringr')


library(Sejong)
library(hash)
library(rJava)
library(tau)
library(RSQLite)
library(devtools)
library(stringr)


install.packages("https://cran.r-project.org/src/contrib/Archive/KoNLP/KoNLP_0.80.2.tar.gz", repos = NULL, type="source")
library(KoNLP)

我在@Richie Cotton 的优秀溶液中发现了 6号包裹过期了的一个细微变化。

有时包维护人员可能会显示它不支持的 R 版本间隔。在这种情况下,您至少有两种选择: 1)将您的 R 版本升级到目标软件包已经支持的下一个版本; 2)安装与您的 R 版本兼容的旧版本中的最新版本。

一个具体的例子: 用于数据挖掘的包 rattle的最新 CRAN 版本5.3.0不支持 R 版本3.4,因为它在包版本5.2.0(R > = 2.13.0)和5.3.0(R > = 3.5)之间有一个大的更新。

在这种情况下,升级 R 安装的替代方案就是上面提到的解决方案。安装包 devtools如果你没有它(它包括包 remotes) ,然后安装特定的版本,将工作在您当前的 R。您可以在 CRAN 页面上查找特定包存档的信息。

library("devtools")
install_version("rattle", version = "5.2.0", repos = "http://cran.us.r-project.org")

在我的例子中,解决方案是简单地升级 R。