我应该如何处理“软件包'xxx'不可用(对于R版本xyz)”警告?


560

9
请注意,在使用RStudio时,从除CRAN之外的其他仓库进行安装时,也会收到此警告。我已经几次报告了这个错误,但是我不知道它是否已经排序。
乔里斯·梅斯 Joris Meys)2014年

Answers:


561

1.你不能拼写

要测试的第一件事是您是否正确拼写了包装名称? 程序包名称在R中区分大小写。


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

接下来,您应该检查包装是否可用。类型

setRepositories()

也可以看看 ?setRepositories

要查看R将寻找哪个存储库,并选择其他一些存储库。至少,您通常会想要CRAN被选中,并且CRAN (extras)如果您使用的是Windows,则选择Bioc*存储库。[gen / prote / metabol / transcript]组学 生物学分析。

要永久更改此设置,setRepositories(ind = c(1:6, 8))请在Rprofile.site文件中添加一行。


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

使用以下命令返回所有可用的软件包

ap <- available.packages()

另见的r可用的软件包的名称?available.packages

由于这是一个大矩阵,因此您可能希望使用数据查看器进行检查。另外,您可以通过对行名进行测试来快速检查包是否可用。

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

另外,可用包的列表可以在浏览器中可以看到CRANCRAN(临时演员)Bioconductor的R-锻造RForgegithub上

与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")先。)

等效于Bioconductor软件包,您可能需要更新Bioconductor安装。

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二进制文件

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

如果软件包需要编译代码(例如C,C ++,FORTRAN),则在Windows上安装Rtools或在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的SO解答和的Details部分中所述?install.packages


10.软件包位于非标准存储库中

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

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

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


2
@KonradRudolph View也在R GUI,架构师,Revo-R和Live-R中工作。尚未在emacs / ESS中尝试过。
Richie Cotton

啊,我的坏。我以为我已经检查过,发现该功能不存在。当然可以(但是在OS X上对我不起作用...)。
康拉德·鲁道夫

9
我认为值得一提的是installr仅在Windows上有效
David Arenburg 2014年

2
“通常对软件包和库之间的区别感到困惑” –好吧,嗯:R开发人员本身对此感到困惑。还有什么其他功能解释library?但是,就此而言,这个答案不应该提及/解释.libPaths吗?安装软件包时,未设置或不可写的库路径似乎是最常见的问题之一。
康拉德·鲁道夫

1
我建议提出另一点:尝试安装r-core内的软件包,如本问题所示parallel,当它已经在r-core中时尝试在其中安装软件包
SergioFernández2015年

90

在最新的R(3.2.3)中,存在一个错误,该错误有时会阻止它找到正确的软件包。解决方法是手动设置存储库:

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

找到其他问题的解决方案


4
怀疑是这种情况。但是,这似乎是r-studio中的错误。我刚刚进行了测试,如果只是从终端启动R,则不需要设置存储库-仅从r-studio中启动。
adempewolff

还有3.5.1。在设置dependencies和之前repos,R无法连接https://mirrors.sorengard.com/cran/src/contrib/PACKAGES(因此其他问题的疑难解答不起作用)。之后,即使软件包仍无法以简单的方式加载,我也可以访问该站点。
user3386170

在我的另一台具有3.5.0版的计算机上。
user3386170 '18

我正在尝试在3.6.0版中加载blotter和quantstrat,并使用了此代码,但无济于事:“在install.packages中警告:软件包'quantstrat'不可用(对于R版本3.6.0)”。还有其他建议吗?
W Barker

e1071在macOS High Sierra上的和R 3.6.1出现了相同的问题。感谢您的帮助
伊戈尔F.

25

似乎与某些版本中的问题Rlibcurl。我有同样的问题上Mac (R version 3.2.2),并Ubuntu (R version 3.0.2)在这两种情况下它是由前运行这只是解决了install.packages命令

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

该解决方案是由一位朋友提出的,但是,我在任何一个论坛中都找不到它,因此将这个答案提交给其他人。


2
对于我的设置,已经curl在Ubuntu和旧版R install.packages(..., method="curl")
2.15.0中

我必须做method="curl"而不是wget,但是它解决了问题
Jeff

install_versiondevtools帮助我解决这个问题。我的Mac也不喜欢wget。(我在R 3.2.3中抱怨无法使用来找到存档软件包http://。其他软件包也安装得很好)
D. Woods

这对我有效,在Ubuntu Linux 64位上安装了R 3.2.2
Darren Wilkinson

22

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

您需要做的只是:

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

正如作者在这里提到的


2
那1%是我:/ install.packages('graph',repos =' cran.us.r-project.org'
Sahil Nagpal

我尝试stringr使用此命令安装软件包,但对我而言失败了。install.packages('stringr',repos = "http://cran.us.r-project.org", dependencies = TRUE) Installing package into ‘/usr/lib/spark/R/lib’ (as ‘lib’ is unspecified) Warning: unable to access index for repository http://cran.us.r-project.org/src/contrib: cannot open URL 'http://cran.us.r-project.org/src/contrib/PACKAGES' Warning message: package ‘stringr’ is not available (for R version 3.4.1)
回归

看起来我也是1%的一部分,但对我
没用

15

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

警告这并非最佳做法。

  • 下载包源。
  • 导航到DESCRIPTION文件。
  • 用您的文本编辑器删除有问题的行,例如

    Depends: R (>= 3.1.1)
  • 从本地安装(即从的父目录安装DESCRIPTION),例如

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

7
通常说存在对R版本的依赖是有原因的,检查这种更改可能会破坏什么是明智的。
jangorecki

1
@dardisco没有删除依赖项,但是感谢您的评论,我发现了依赖项,看到我只需要升级R。谢谢
sa_zy

9

对我而言,发生的一件事情是我的Linux发行版提供的R版本(Ubuntu 14.04提供的R版本3.0.2)对于CRAN上可用的软件包的最新版本(在我的情况下为plyr1.8.3 版)而言太旧了。截至今日)。解决方案是使用我发行版的打包系统,而不是尝试从R安装(apt-get install r-cran-plyr获得1.1.8版plyr)。也许我本可以尝试使用来更新R updateR(),但是恐怕这样做会干扰我发行版的软件包管理器。


对于Ubuntu的问题,请查看自述文件:cran.r-project.org/bin/linux/ubuntu/README
Joris Meys

该解决方案为我为Debian的包mvtnormks依赖于。命令是apt-get install r-cran-mvtnorm
Justapigeon

8

这为我节省了大量调试问题的时间。在许多情况下,镜像只是过时的。此函数可以使用以下命令安装多个软件包及其依赖项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"))

6

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

1:通过Google搜索该软件包。

2:手动下载具有tar.gz扩展名的文件

3:在R中选择安装软件包的选项“软件包档案文件(.zip; .tar.gz)”

4:在本地浏览到下载并单击“安装”的位置

您可能会得到警告:该软件包不存在依赖项“ xyz”,然后首先从存储库中安装依赖项,然后执行步骤3-4。


4

我通过认真按照安装R说明修复了Ubuntu上的此错误。这包括:

  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

对于第1步,您可以根据需要选择任何CRAN下载镜像来代替我的多伦多大学的镜像。


这种方法确实解决了我的问题,但是仍然将我的R更新到最新版本(从3.023.4)。如果要更新R,这是一个不错的方法。
贝尔特

4

repos=NULL从源代码安装R软件包时,我犯了忘记放的错误。在这种情况下,错误消息会引起误解: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)这次对我有用的工作。

希望这对某人有帮助。


1
当我尝试install.packages('foobarbaz',repos = NULL)时,出现错误“ install.packages(” pair“,repos = NULL)错误:type ==” both“不能与'repos = NULL'一起使用”
Ajay B,

1
感谢您的评论- type="source"由于我提到我是从源代码安装此程序包的,我想我忘记写参数了,我将编辑答案。
Damjan

3

我有一个相同的问题(在Linux上),可以通过更改代理设置来解决。如果您位于代理服务器后面,请检查Sys.getenv("http_proxy")R中的配置。在我~/.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

当我读到“ package xxx不适用于r版本-xyz”时,这不是第一个想法...

高温超导


2

另一个原因+解决方案

尝试安装pkgdown时遇到此错误(“软件包XXX无法用于R版本XXX”)在公司的HPC上的RStudio中。

事实证明,他们在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")


2
  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)

1

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

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

1
这仅适用于生物导体包装,这也是必须安装生物导体包装的方式。
Joris Meys

@JorisMeys在我看来,到目前为止,我尝试安装的所有软件包都可以通过此方法获得,但是我主要使用R进行生物信息学研究。
bli

1
@JorisMeys我不知道如何,但是biocLite能够透明地在cran上获取这些软件包并安装它们。我刚刚进行了测试dplyr(如果需要的话,请在Xubuntu 16.04上进行测试)。为了尽可能避免混乱,我现在尝试以“相同方式”(当前使用biocLite)安装所有软件包。
bli

2
@bli你说得对,我已经纠正了。中的代码biocLite识别出该软件包的正确存储库,然后调用install.packages()进行实际安装。但这不起作用,因为您使用biocLite。之所以有效install.packages(),是因为它应该做的事。使用biocLite()和使用之间没有什么区别,install.packages()除了开销以及biocLite()默认情况下还会更新它认为必要的所有其他软件包这一事实。因此,我仍然建议使用install.packages()非生物导体包装。
Joris Meys

2
@bli它不能保证兼容性,它会将所有内容更新到最新版本(除非您输入suppressUpdates = TRUE)。这与调用update.packages()然后相同install.packages()。因为从字面上看biocLite这就是引擎盖下的功能。
乔里斯·梅斯

0

另一个较小的补充,同时尝试使用docker映像测试旧的R版本 rocker/r-ver:3.1.0

  1. 默认repos设置为MRAN,这将导致无法获取许多软件包。
  2. 该版本的R没有https,因此,例如: install.packages("knitr", repos = "https://cran.rstudio.com")似乎有效。

0

我发现@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如果没有安装该软件包(包括package remotes),请安装它,然后安装将在当前R中运行的特定版本。您可以在CRAN页面上查找该信息以获取特定的软件包档案。

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


-1

如前所述这里(法语),当您安装在电脑上的R两个版本会发生这种情况。卸载最旧的软件包,然后再次尝试安装软件包!对我来说很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.