繁体   English   中英

R 尝试从 Artifactory 安装旧的不可用软件包

[英]R tries to install old not available packages from Artifactory

解决方案

删除 Artifactory 缓存中的.RDS


问题

我在 Ubuntu 上使用 R 3.6.2 和 CRAN 的企业镜像时遇到了一个非常奇怪的问题。 假设我运行以下命令:

install.packages('rlang')

我得到的是找不到0.4.2版本。 当我手动查看存储库时,我发现0.4.2确实不存在,但0.4.3确实存在。 首先,我认为存储库存储索引的PACKAGES文件有问题。 但我查看了它,它指向rlang的正确和可用版本。

执行install.packages()时,R 从哪里获取它放入查询 URL 的版本号?

更新

我试过install.packages("http://private.com/src/contrib/rlang_0.4.3.tar.gz", repos=NULL)并且它有效。 接下来我将尝试在新的 Ubuntu 环境中复制该问题。 也许我在安装 R 并将其升级到 3.6.2 时搞砸了


当我降级到 R 版本 3.4.4 时,问题仍然存在。 可能跟企业镜像有关吧? 我会尝试一个官方的。


感谢 Dirks 的回答,我通过available.packages()发现镜像有问题,而不是 R 安装有问题。

> AP <- available.packages()
> res <- AP[ AP[,1] == "rlang", ]
> str(res)
 Named chr [1:17] "rlang" "0.4.2" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...

由于镜像中PACKAGES的可读版本包含0.4.3我认为PACKAGES.rds有问题。 接下来,我将尝试读入该对象以确认我的假设。


Dirk 建议我检查索引的时间戳,我想我发现了问题。 0.4.3不久前发布。 虽然可读索引仅在其他几个之前更新,但.rds文件(可能由 R 使用)自2020-01-16以来一直没有更新。 因此,R 尝试下载不再属于存储库的版本。

现在我想知道谁负责更新RDS文件? 存储库本身? 我会在下次报告......也许在随机批处理作业更新存储库后问题会自行解决。

rlang 包: Rlang 包

时间戳: 不同的时间戳

包内容: 包装内容


我手动下载了PACKAGES.rds并在其上使用了readRDS() 它指向旧版本。 我还检查了镜像的回购。 它的PACKAGES.rds指向正确的版本。 此外,我确保问题独立于我使用的发行版和图像而持续存在。

你可以问R这个问题! available.packages()函数告诉您它知道的“一切”,其中一个条目是“Repository”。

所以:

R> AP <- available.packages()       ## all known packages given options("repos")
R> res <- AP[ AP[,1] == "rlang", ]  ## find rlang
R>
R> str(res)
 Named chr [1:17] "rlang" "0.4.3" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...
R> 
R> names(res)
 [1] "Package"               "Version"              
 [3] "Priority"              "Depends"              
 [5] "Imports"               "LinkingTo"            
 [7] "Suggests"              "Enhances"             
 [9] "License"               "License_is_FOSS"      
[11] "License_restricts_use" "OS_type"              
[13] "Archs"                 "MD5sum"               
[15] "NeedsCompilation"      "File"                 
[17] "Repository"           
R> 
R> res["Repository"]
                               Repository 
"https://cloud.r-project.org/src/contrib" 
R> 

这并不奇怪,因为这是我使用的默认配置(并在 Debian / Ubuntu 包中编码)的默认存储库。

如果你这样做

?install.packages()

它将为您提供有关进行检索的函数的一些信息,您可以输入一个“repo”参数。 大多数情况下,如果我有软件包安装问题并且不太担心运行以下程序的确切版本:

install.packages("rlang", dependencies = TRUE)

通常对我很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM